嗨,有人可以指出我这个代码有什么问题吗?
#include <stdio.h>
int convstrg(char* str) {
int output = 0;
char* p = str;
for (int i=0;str[i]!='\0';i++) {
char c = *p++;
if (c < '0' || c > '9')
continue;
output *= 10;
output += c - '0';
}
return output;
}
int main(){
char x[] = "1xx23";
printf("%d\n", convstrg(x));
return 0;
}
当输出为字符串整数时,代码应返回一个整数。但似乎我得到了奇怪的数字,如0。
这几个测试用例,其中一些有些没用
"123" -> 123
"23xyz" -> 23
"" -> 0
"abc" -> 0
"-1" -> -1
由于
修改
好的,现在我整理了所有期望的负字符串..
答案 0 :(得分:2)
-
,因此您不能指望正确解析负数。 if (c < '0' || c > '9')
而不是继续。否则,来自12xyz123
的解析值将非常奇怪。std::atoi
或使用std::stringstream
。有关详细信息,请查看here。boost::lexical_cast
之类的第三方库,例如boost::lexical_cast<int>(x)