解析字符串,其中“分隔符”可以是数据的一部分?

时间:2012-04-18 19:51:20

标签: c++ string parsing std

我有这样的字符串:

用户名:消息

首先看起来这似乎是一个简单的问题,但问题在于名称的最后一个字符可能是':',字符串的消息部分的第一个字母也可能是':'。用户名称中也可以包含空格。

所以用户可能是名字'某个名字:' 并可能输入消息':Hello'

看起来像是这样的: '某个名字:::你好'

我确实有用户名列表(矢量)。

鉴于此,有没有办法从这种字符串中提取用户名? (理想情况下,无需遍历用户列表)

由于

4 个答案:

答案 0 :(得分:1)

尝试使用regex (\w+?):\ \w+

答案 1 :(得分:1)

如果你不能保证用户名不包含“:”字符,并且你想避免每次检查整个列表,你可以试试一个快捷方式。

保留一个包含特殊字符的用户名的向量(我想象这是所有用户名的一小部分)。首先检查一下,如果找到匹配项,请在[用户名]后面取字符串:。否则,你可以简单地在冒号上做一个天真的分裂。

答案 2 :(得分:0)

我会使用字符串标记

string text = "token, test   string";

char_separator<char> sep(":");
tokenizer< char_separator<char> > tokens(text, sep);
BOOST_FOREACH(string t, tokens)
{
    cout << t << "." << endl;
}

答案 3 :(得分:0)

我接近这个的方法是简单地找到第一个冒号。在那里拆分字符串,然后修剪剩下的两个字符串。

我不完全清楚为什么还有额外的冒号以及它们是否是价值的一部分。如果需要删除它们,那么您还需要将它们删除。