用npos将线切成零件

时间:2019-07-05 07:55:28

标签: c++

我正在练习将字符串切成段,然后编写了这些代码。

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。

另一个问题是nposend()(用于矢量或地图)之间有什么区别?

1 个答案:

答案 0 :(得分:0)

除了Yksisarvinen提出的要点外,现在您首先尝试利用该结果,然后再检查是否有任何有效的结果。在您的代码中next ==string::npos是正确的,并且第一个if中的任何内容都不会表现出预期的行为。

搜索时应该进行的绝对第一检查,无论您使用哪种技术(查找,正则表达式,自制代码)为 我们找到了什么吗? if (next == string::npos)应该是找到之后的第一件事...