atoi转换返回单个数字值

时间:2011-11-14 19:38:31

标签: c++ atoi

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

+---+---+---+
|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(&amp; inputInitial [i])它会读到i + 1,i + 2 ......等等直到它遇到错误。 我想将atoi扫描限制为单个字符。是否有可能或者我应该使用其他功能?

5 个答案:

答案 0 :(得分:8)

不要使用atoi,只需使用它:

if(isdigit(c))
    val = c - '0';
else
    val = 0

答案 1 :(得分:0)

关于atoi的问题是正确的。如果要转换单个数字,可以创建一个仅包含该字符串的字符串:

char temp[2] = { inputInitial[indexArray[i]], '\0' );
inputNumArray[i] = atoi( temp );

答案 2 :(得分:0)

你可以暂时将字符串中的下一个字符的值更改为0,这样我就可以读取一个数字。

答案 3 :(得分:0)

atoi期望一个空终止的字符序列。

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

int ctoi ( char ch ) {
    if ( ch >= '0' && ch <= '9' ) return ch - '0';
    return -1; // error
    }

答案 4 :(得分: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