从没有空格的字符串中读取整数

时间:2016-10-07 22:03:15

标签: c++ string

我试图从字符串中读取数字,例如 如果

string str = "1Hi15This10";

我想得到(1,15,10)

我通过索引尝试但是我将10读为1而0不是10。 我无法使用getline因为字符串没有被任何东西分开。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

没有正则表达式,你可以这样做

std::string str = "1Hi15This10";
for (char *c = &str[0]; *c; ++c)
   if (!std::isdigit(*c) && *c != '-' && *c != '+') *c = ' ';

整数现在由空格分隔符分隔,这对于解析

来说是微不足道的

答案 1 :(得分:0)

恕我直言,最好的方法是使用正则表达式。

#include <iostream>
#include <iterator>
#include <string>
#include <regex>

int main() {
    std::string s = "1Hi15This10";

    std::regex number("(\\d+)");  // -- match any group of one or more digits

    auto begin = std::sregex_iterator(s.begin(), s.end(), number);

    // iterate over all valid matches  
    for (auto i = begin; i != std::sregex_iterator(); ++i) {
        std::cout << "  " << i->str() << '\n';
        // and additional processing, e.g. parse to int using std::stoi() etc.
    }
}

输出:

  1
  15
  10

Live example here on ideone.

是的,您可以为此编写自己的循环,但是:

  1. 你可能会在某个地方犯一些愚蠢的错误,
  2. 正则表达式可以适用于许多不同的搜索模式;例如如果你决定要支持十进制/负数/浮点数,该怎么办?这些案例和许多其他案例都可以通过正则表达式轻松支持,可能与您的自定义解决方案不同:)