String Stream in C++ 解析单词和数字字符串

String Stream in C++ to parse string of words & numbers

本文关键字:数字 数字字符 字符串 单词 Stream in C++ String      更新时间:2023-10-16

我有这样的字符串:'123plus43times7'

数字后面跟着字典里的单词。

我知道我可以使用>>运算符提取int/数字:

StringStream >> number

我可以得到号码。然而,Stream中仍然有数字。当数字的长度未知时,我该如何删除数字,还是应该找出数字的长度,然后使用str.substr()创建一个新的String Stream?任何其他使用C++STL字符串和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;
}

这里有一种方法可以实现

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;
    }