正确找到字符串中的数字?

时间:2015-02-15 22:46:24

标签: c++ string vector

我试图从字符串中读取字符(数字),然后将它们作为整数传递给向量。目前是这样的:

int p;
std::string line = "1111222111"
std::vector<int> vec;
for(int i = 0; i < str.size(); i++)
{
    if(line.find('0', static_cast<std::size_t>(i)) != line.npos)
        p = 0;

    else if(line.find('1', static_cast<std::size_t>(i)) != line.npos)
        p = 1;

    else if(line.find('2', static_cast<std::size_t>(i)) != line.npos)
        p = 2;

    vec.push_back(p);
}

执行此操作时,向量仅以0结尾。请记住,这是实际代码,只是我遇到问题的部分的模糊表示。我认为我必须在line.find中做错事,但我真的不知道如何使用它(不是我真的知道如何真正使用它......)。先谢谢你们!

3 个答案:

答案 0 :(得分:2)

#include <vector>
#include <string>

int main(int argc, char *argv[])
{
  std::vector<int> ans;
  const std::string str = "1234";
  for (int i = 0; i < str.size(); ++i) {
    if ('0' <= str[i] && str[i] <= '9')
      ans.push_back(str[i] - '0');
  }

  return 0;
}

答案 1 :(得分:2)

您可以使用isdigit函数来确定该字符是否为数字。如果是这样,您可以利用ASCII命令相邻数字的事实。

您可以使用以下代码解决问题:

for(int i = 0; i < str.size(); i++) {
    int c = str[i]-'0';
    if(c >= 0 && c <= 9) {
        vec.push_back(c);
    }
}

答案 2 :(得分:1)

我认为你应该改为:

for(int i = 0; i < str.size(); i++)

有这个:

 for(int i = 0; i < line.size(); i++)
您的示例中未定义

str。我认为你的意思是line