C++整理负输出

标签 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

谢谢

编辑

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

最佳答案

  • 您永远不会检查前导字符是否为 -因此,您不能指望正确解析负数。
  • 你应该打破 if (c < '0' || c > '9')而不是继续。否则来自 12xyz123 的解析值会很奇怪。
  • 我希望您知道有内置函数可以从字符串中解析整数,例如使用 std::atoi或使用 std::stringstream .看看here了解更多详情。
  • 您还可以使用第三方库,例如 boost::lexical_cast像这样boost::lexical_cast<int>(x)

关于C++整理负输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19045813/

相关文章:

algorithm - Strassen算法可以用于 boolean 矩阵乘法吗?

algorithm - 如何将数字分成 3 部分,使每个部分与其他部分成黄金比例?

c++ - 不初始化 C++ 构造函数中的每个成员是一种好习惯吗?

c++ - 如何将函数变量传递给 C++ lambda 函数

c++ - 有没有办法编写 "for-eachability"类型的 SFINAE 测试?

c++ - 如何将非静态函数作为回调传递?

algorithm - 为什么贪心算法对某些不同于美国货币的货币不起作用?

algorithm - 理解 HSL 到 RGB 色彩空间转换算法

algorithm - 如何生成信号以停止分布式模型中其他进程的执行

c++ - DLL 加载时未解析的符号