3

我有一个这样的字符数组:

+---+---+---+
|53.|.7.|...|
|6..|195|...|
|.98|...|.6.|
+---+---+---+

我正在使用 int 数组将特定值存储在特定索引处。对于我使用过的转换

            for(int i=0;i<27;i++)
        {
        inputNumArray[i]=atoi(&inputInitial[indexArray[i]]);        
        }

现在问题是我想要的输出是:

5 3 0 0 7 0 0 0 0
6 0 0 1 9 5 0 0 0
0 9 8 0 0 0 0 6 0

代码返回给我:

53 3 0 0 7 0 0 0 0
6 0 0 195 95 5 0 0 0
0 98 8 0 0 0 0 6 0

我认为原因是 atoi 扫描直到找到字符,并且atoi(&inputInitial[i])它将读取直到 i+1, i+2... 等等,直到遇到错误。我想将 atoi 扫描限制为仅单个字符。有可能还是我应该使用其他功能?

4

5 回答 5

8

不要使用atoi,只需使用这个:

if(isdigit(c))
    val = c - '0';
else
    val = 0
于 2011-11-14T19:41:53.560 回答
1

你的说法atoi是正确的。如果要转换单个数字,则可以创建一个仅包含以下内容的字符串:

char temp[2] = { inputInitial[indexArray[i]], '\0' );
inputNumArray[i] = atoi( temp );
于 2011-11-14T19:41:07.857 回答
0

我不清楚输入格式。但是,这是我对数组所做的:

char x[] = "12345678";
int out[] = new out[strlen(x)];

int* oit = out;
for (char* it=x; it < x+sizeof(x);)
     *oit++ = (*it++)-'0'


// out[] now contains char-by-char value as int
于 2011-11-14T19:43:11.113 回答
0

您可以暂时将字符串中下一个字符的值更改为 0,以便 a to i 只读取一个数字。

于 2011-11-14T19:41:27.510 回答
0

atoi 需要一个以空字符结尾的字符序列。

最好编写自己的带有单个字符的函数,例如:

int ctoi ( char ch ) {
    if ( ch >= '0' && ch <= '9' ) return ch - '0';
    return -1; // error
    }
于 2011-11-14T19:42:19.570 回答