使用字符串分隔符(标准C++)解析(拆分)C++中的字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (176)

使用以下方法解析C++中的字符串:

string parsed,input="text to be parsed";
stringstream input_stringstream(input);

if(getline(input_stringstream,parsed,' '))
{
     // do some processing.
}

用一个字符分隔符进行解析是可以的。但是,如果我想使用字符串作为分隔符,怎么办。

示例:想分开:

scott>=tiger
提问于
用户回答回答于

此方法使用std::string::find

#include <iostream>
#include <string>

int main()
{
    std::string s = "scott>=tiger";
    std::string delim = ">=";

    auto start = 0U;
    auto end = s.find(delim);
    while (end != std::string::npos)
    {
        std::cout << s.substr(start, end - start) << std::endl;
        start = end + delim.length();
        end = s.find(delim, start);
    }

    std::cout << s.substr(start, end);
}
用户回答回答于

可以使用std::string::find()函数查找字符串分隔符的位置,然后使用std::string::substr()

例子:

std::string s = "scott>=tiger";
std::string delimiter = ">=";
std::string token = s.substr(0, s.find(delimiter)); // token is "scott"

如果有多个分隔符,则在提取一个令牌后,可以删除它(包括分隔符)以继续后续提取(如果要保留原始字符串,只需使用s = s.substr(pos + delimiter.length());)):

s.erase(0, s.find(delimiter) + delimiter.length());

完整示例

std::string s = "scott>=tiger>=mushroom";
std::string delimiter = ">=";

size_t pos = 0;
std::string token;
while ((pos = s.find(delimiter)) != std::string::npos) {
    token = s.substr(0, pos);
    std::cout << token << std::endl;
    s.erase(0, pos + delimiter.length());
}
std::cout << s << std::endl;

输出:

scott
tiger
mushroom

扫码关注云+社区

领取腾讯云代金券