我有这样的字符串:
用户名:消息
首先看起来这似乎是一个简单的问题,但问题在于名称的最后一个字符可能是':',字符串的消息部分的第一个字母也可能是':'。用户名称中也可以包含空格。
所以用户可能是名字'某个名字:' 并可能输入消息':Hello'
看起来像是这样的: '某个名字:::你好'
我确实有用户名列表(矢量)。
鉴于此,有没有办法从这种字符串中提取用户名? (理想情况下,无需遍历用户列表)
由于
答案 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)
我接近这个的方法是简单地找到第一个冒号。在那里拆分字符串,然后修剪剩下的两个字符串。
我不完全清楚为什么还有额外的冒号以及它们是否是价值的一部分。如果需要删除它们,那么您还需要将它们删除。