我有一个像这样的字符数组:
+---+---+---+ |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扫描限制为单个字符。是否有可能或者我应该使用其他功能?
答案 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