C ++梳理负输出

时间:2013-09-27 08:07:22

标签: c++ algorithm

嗨,有人可以指出我这个代码有什么问题吗?

#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

由于

修改

好的,现在我整理了所有期望的负字符串..

1 个答案:

答案 0 :(得分:2)

  • 您永远不会检查前导字符是否为-,因此您不能指望正确解析负数。
  • 您应该打破 if (c < '0' || c > '9')而不是继续。否则,来自12xyz123的解析值将非常奇怪。
  • 我希望您知道有一些内置函数可以解析字符串中的整数,例如使用std::atoi或使用std::stringstream。有关详细信息,请查看here
  • 您还可以使用boost::lexical_cast之类的第三方库,例如boost::lexical_cast<int>(x)