我有串这样的: “123plus43times7”++字符串流在C解析单词号码串
其中编号,接着从一词典中的单词。
我明白,我可以通过使用>>
运营商提取INT /编号:
StringStream >> number
我能得到多少。但是,Stream中仍然有数字。如何在数字长度未知时删除数字,或者我应该找出数字的长度,然后使用str.substr()创建新的字符串流? 任何其他更好的使用C++ STL String和SStream的方法将非常感激。
我有串这样的: “123plus43times7”++字符串流在C解析单词号码串
其中编号,接着从一词典中的单词。
我明白,我可以通过使用>>
运营商提取INT /编号:
StringStream >> number
我能得到多少。但是,Stream中仍然有数字。如何在数字长度未知时删除数字,或者我应该找出数字的长度,然后使用str.substr()创建新的字符串流? 任何其他更好的使用C++ STL String和SStream的方法将非常感激。
您可以插入文本和数字,然后用std::stringstream
#include <iostream>
#include <string>
#include <sstream>
#include <cctype>
int main()
{
std::string s = "123plus43times7";
for (size_t i = 0; i < (s.size() -1); i++)
{
if (std::isalpha(s[i]) != std::isalpha(s[i + 1]))
{
i++;
s.insert(i, " ");
}
}
std::stringstream ss(s);
while (ss >> s)
std::cout << s << "\n";
return 0;
}
'while(ss >> s)'做什么?它似乎覆盖了原来的字符串's'。这是否意味着'ss'保留了(原始)'s'的副本? –
每次都会覆盖's'。 'ss'类似于一个文件流,它的内容不会改变,但是在每次操作之后它会移动到下一个文件位置。在这里查看结果:https://ideone.com/qvJvMV –
这里有一个办法做到这一点
string as = "123plus43times7";
for (int i = 0; i < as.length(); ++i)
{
if (isalpha(as[i]))
as[i] = ' ';
}
stringstream ss(as);
int anum;
while (ss >> anum)
{
cout << "\n" << anum;
}
之间的空格这似乎简单了很多,只是读取整个字符串转换成std :: string,然后迭代字符以将其分成连续的数字和字母块。当你分开块时,你可以通过'std :: atoi()'将数字序列转换成整数。 –
@DanMašek是正确的。一旦你得到一个数字,你只需要一个'string'和一个'>>'到'string'就可以停止空格。它会抓住你的信件,你的电话号码和其他一切。 – user4581301