从没有空格的字符串中读取整数
Posted
技术标签:
【中文标题】从没有空格的字符串中读取整数【英文标题】:Reading integers from a string with no space 【发布时间】:2016-10-07 22:03:14 【问题描述】:我正在尝试从字符串中读取数字,例如 如果
string str = "1Hi15This10";
我想得到 (1,15,10)
我按索引尝试了,但我将 10 读为 1 和 0 而不是 10。
我无法使用getline
,因为字符串没有被任何东西分隔。
有什么想法吗?
【问题讨论】:
这可能会对您有所帮助:***.com/questions/17331250/… 您熟悉使用正则表达式进行匹配吗?您可以使用/(\d+)/g
之类的东西来匹配字符串中的整数组,然后在作为组返回的字符串中解析出整数本身。
【参考方案1】:
没有正则表达式你可以这样做
std::string str = "1Hi15This10";
for (char *c = &str[0]; *c; ++c)
if (!std::isdigit(*c) && *c != '-' && *c != '+') *c = ' ';
整数现在由一个易于解析的空格分隔符分隔
【讨论】:
也可以使用!std::isdigit(*c)
,也可以应付非字母。还可能需要调整方法以允许存在符号字符(+
或 -
)。
这可能会调用未定义的行为。 Details【参考方案2】:
恕我直言,最好的方法是使用正则表达式。
#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.
是的,您可以为此编写自己的循环,但是:
-
你可能会在某个地方犯一些愚蠢的错误,
正则表达式可以适应多种不同的搜索模式;例如如果 tmr 你决定要支持十进制/负数/浮点数怎么办?使用正则表达式可以轻松支持这些情况和许多其他情况,而您的自定义解决方案可能不会那么多:)
【讨论】:
以上是关于从没有空格的字符串中读取整数的主要内容,如果未能解决你的问题,请参考以下文章