B2156 最长单词 2

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

本题考察字符串。

对于此类有不定个数的读入,我们可以使用 while (cin >> s),每次读入一个“以空格分隔”的字符串 s

因为读到的最后一个单词后面带着句号,因此在读入的时候,我们要检查 s 的最后一个字符。如果是句号,就把它去掉,同时知道这是最后一个单词,准备退出循环。

去掉句号可以使用 pop_back 函数,例如,s.pop_back() 即可直接去掉最后一个字符。你也可以使用 substr 函数。假设字符串 s 的长度为 len,那么使用 s = s.substr(0, len-1) 也可去除最后一个字符。

接着,使用打擂台法比较字符串的长度即可完成本题。

参考代码:

while (cin >> s) {
    bool end = false;  
    // 如果最后一个字符是 '.', 就把它去掉,并标记结束
    int len = s.size();
    if (s[len-1] == '.') {
        s = s.substr(0, len-1);
        // 这一句话可以换成:s.pop_back(),注意不是 s = s.pop_back();
        end = true;
    }
    // 比较长度,更新最长单词
    if (s.size() > ans.size())
        ans = s;
    if (end) break; // 遇到句号,跳出循环
}