1

嗨,有人能指出这段代码有什么问题吗?

#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

谢谢

编辑

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

4

1 回答 1

2
  • 您永远不会检查前导字符是否-因此您不能期望正确解析负数。
  • 你应该break if (c < '0' || c > '9')而不是continue。否则解析出来的值12xyz123会很奇怪。
  • 我希望您知道有一些内置函数可以从字符串中解析整数,例如使用std::atoi或使用std::stringstream. 在这里查看更多详细信息。
  • boost::lexical_cast您也可以像这样使用第三方库boost::lexical_cast<int>(x)
于 2013-09-27T08:14:48.657 回答