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

Possible Duplicate:
07000

我使用以下语法解析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

转载注明原文:使用字符串分隔符(标准C)解析(拆分)C中的字符串 - 代码日志