我正在使用以下内容在 C++ 中解析一个字符串:
using namespace std; string parsed,input="text to be parsed"; stringstream input_stringstream(input); if (getline(input_stringstream,parsed,' ')) { // do some processing. }
使用单个字符定界符进行解析很好。但是,如果我想使用字符串作为分隔符怎么办。
示例:我想拆分:
scott>=tiger
用>=作为分隔符,这样我就可以得到斯科特和老虎。
>=
您可以使用该std::string::find()函数查找字符串分隔符的位置,然后用于std::string::substr()获取令牌。
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"
该find(const string& str, size_t pos = 0)函数返回字符串中第一次出现的位置str,或者npos如果未找到该字符串。
find(const string& str, size_t pos = 0)
str
npos
该substr(size_t pos = 0, size_t n = npos)函数返回对象的子字符串,从 positionpos和 length开始npos。
substr(size_t pos = 0, size_t n = npos)
pos
如果您有多个分隔符,则在提取一个标记后,可以将其删除(包括分隔符)以继续进行后续提取(如果要保留原始字符串,只需使用s = s.substr(pos + delimiter.length());):
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