C ++ STD find_last_of不工作?

时间:2014-02-03 12:32:18

标签: c++ string std

我正在尝试编写一个函数来清除前面或后面的空格中的字符串。

所以基本上,如果你将函数" \tHello, this is a test! \t"传递给它,那么它必须返回"Hello, this is a test!"。这是我的代码,但是......

string clean_str(string str)
{
    const string alphabet("abcdefghijklmnopqrstuvwxyz1234567890åäö-");

    size_t first = str.find_first_of(alphabet);
    size_t last = str.find_last_of(alphabet);
    return str.substr(first, last);
}

int _tmain(int argc, _TCHAR* argv[])
{
    string s("         test 123-4    ");
    cout << "[" << clean_str(s) << "]";
    Sleep(INFINITE);
    return 0;
}

返回

// s == "test 123-4    "

哪个错了。无论如何我决定选择Boost,但我仍然想知道为什么这不起作用。

感谢。

2 个答案:

答案 0 :(得分:6)

问题是substr的第二个参数 - 它应该是子字符串中字符数的计数。这意味着你应该这样做:

return str.substr(first, last - first + 1);

确保您始终阅读您正在使用的功能的文档(可能直到您了解它为止)。

答案 1 :(得分:1)

使用以下

return ( first == std::string::npos ? "" : str.substr(first, last + 1 - first ) );

第二个参数指定应提取的字符数。