发布日期:2018-03-26
使用字符串分隔符(标准C ++)解析(拆分)C++中的字符串+ 查看更多
使用字符串分隔符(标准C ++)解析(拆分)C++中的字符串
+ 查看更多
发布日期:2018-02-26 14:07
分类:CPlusPlus
浏览次数:158
我使用以下语法解析C ++中的字符串:
string parsed,input="text to be parsed"; stringstream input_stringstream(input); if(getline(input_stringstream,parsed,' ')) { // do some processing. }
使用单个字符分隔符解析是对的。 但如果我想使用字符串作为分隔符。
例如:我想要拆分
例如:我想要拆分
scott>=tiger
用> =作为分隔符,这样我就可以得到scott和tiger。
回答
你可以使用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。
substr(size_t pos = 0,size_t n = npos)函数返回对象的子字符串,从位置pos开始,长度为npos。
如果你有多个分隔符,在得到一个标记后,您可以删除它(包括分隔符)以继续后续获取(如果要保留原始字符串,只需使用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