我正在练习将字符串切成段,然后编写了这些代码。
string a = "12/1322.39102";
int current = 0;
int next;
while (true)
{
next = a.find_first_of("/.", current);
if (next != current)
{
cout << "c = " << current << endl;
cout << "n - c = " << next-current << endl;
string tmp = a.substr(current, next-current);
if (tmp.size())
cout << tmp << endl;
}
if (next == string::npos)
break;
current = next + 1;
}
我很困惑,因为如果find_first_of
找不到任何字符(即'/'和'。'),它将返回npos
或返回-1。
在那种情况下,我认为它不会输出最后一个数字39102,因为下一个电流等于-9。
另一个问题是npos
和end()
(用于矢量或地图)之间有什么区别?
答案 0 :(得分:0)
除了Yksisarvinen提出的要点外,现在您首先尝试利用该结果,然后再检查是否有任何有效的结果。在您的代码中next ==string::npos
是正确的,并且第一个if中的任何内容都不会表现出预期的行为。
搜索时应该进行的绝对第一检查,无论您使用哪种技术(查找,正则表达式,自制代码)为 我们找到了什么吗? if (next == string::npos)
应该是找到之后的第一件事...