c++ - 在 C++ 中将字符串转换为 int 的问题

标签 c++ string programming-languages

我有一个应用程序,我得到一个 vector<string> .我需要遍历 vector 中的每个元素并查看某个值是否为整数值。

虽然 vector 表示字符串,但很少有元素可以包含整数。我需要弄清楚哪些元素是整数,如果一个元素是整数,我需要它的值。如果 vector 中的元素是字符串,那么我就忽略它。

我尝试使用 atoi(vector[index].c_str()) ,但我对此有疑问。 atoi如果字符串中包含的值是整数,则返回一个整数值。如果不是,则返回 0

因此,请考虑以下事项:

atoi("Shankar") = 0
atoi("0") = 0

atoi("123") = 123
atoi("123Shankar") = 123

那么,我该如何区分上面显示的案例呢?如果使用 atoi 无法实现这一点,那么该问题的替代解决方案是什么?

请协助。

编辑:

我可以遍历字符串并查看是否每个字符都是整数,但这会降低性能,因为对于平均有 n 个字符的 m 个字符串,我需要检查 m X n 次,这使得它成为 O(n^2 ).

有没有更好的方法来解决这个问题?

EDIT2:

不幸的是,我不能为此使用任何第 3 方库,只能使用 STL

EDIT3:

在我的应用程序中, vector 不包含任何负整数,所以我正在考虑 Xeo 的解决方案,因为 sstream 不区分“123”和“123Shankar”

感谢大家的帮助。

最佳答案

只需检查您的字符串并检查每个字符是否为整数。如果不是,则爆发并报告错误。

bool IsDigit(char c){
  return '0' <= c && c <= '9';
}

bool IsInteger(std::string const& str){
  size_t i = 0;
  if(*str == '-') ++i;
  for( ; i < str.size(); ++i){
     if(!IsDigit(str[i]))
       return false;
  }
  // all chars are integers
  return true;
}

编辑
atoi 实际上没有做任何其他事情。请参阅此示例实现:

int StrToInt(char const* str){
  int ret = 0, sign = 1;
  if(*str == '-'){
    sign = -1;
    ++str;
  }
  while(IsDigit(*str)){
    ret *= 10; // make room for the next digit
    ret += ((*str) - 0x30); // convert char to digit
    ++str;
  }
  return ret * sign;
}

关于c++ - 在 C++ 中将字符串转换为 int 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5528053/

相关文章:

c - 递归函数,调用后命令

programming-languages - 根据语言选择工作?

c++ - 将 std::exception 转换为 EXCEPTION_POINTERS

c++ - 我可以在 C++ 中有一个 "type of types"吗?

Android/C++ - 命令 ""\bin\ant.bat"以代码 3 退出

Golang mysql html 注释

c - 为什么 C 允许在 block 周围省略大括号?

java - 类到另一个类实例化 : Java to C++ Conversion

javascript - 转换字符串货币

string - 如何将字符串附加到 ant 中的属性?