C++ 最长单词出现次数,出现 '\0' 错误

标签 c++

问题是在键盘给出的输入字符串中找到最长的单词,程序运行良好,它找到了最长的单词,除了如果最长的单词在输入的最后(对于例如,Hello Classroom!)程序将返回 Hello 而不是 Classroom!我认为是因为 '\0'。

代码如下:

    int main() {

    string s;
    string tmp_longest;
    string longest;

    getline(cin, s);

    int size = s.length();

    int full_counter = 0, no_space_counter = 0;

    for (int i = 0; i < s.length(); i++) {
        full_counter++;
        if (s.at(i) != ' ') {
            no_space_counter++;
            tmp_longest += s.at(i);
        }
        else if (s.at(i) == ' ' || s.at(i) == '\0') { // i think that's the problem but cant figure it out
            if (tmp_longest.length() > longest.length())
                longest = tmp_longest;

            tmp_longest = "";


        }
    }

    cout << "Longest word: " << longest << endl;
    cout << "Character of the word: " << longest.length() << endl;
    cout << "String length: " << full_counter << endl;
    cout << "String length (without spaces): " << no_space_counter << endl;;

}

每次 for 遇到空格时,我都会进行检查,因此我可以检查实际内存最长的单词和最后内存的单词。

这里有一些 img 可以更好地解释问题。

First image

Second image

最佳答案

线

else if (s.at(i) == ' ' || s.at(i) == '\0')

没有意义,因为i的最后一个值是s.length()-1

for循环结束后,需要重复这几行

if (tmp_longest.length() > longest.length())
     longest = tmp_longest;

关于C++ 最长单词出现次数,出现 '\0' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47001944/

相关文章:

javascript - 跨 JS 和 C++ 的 Emscripten malloc 和免费

c++ - 检查某种类型是否是模板类 std::optional 的实例化

c++ - CUDA 多线程 : __threadfence not preventing multiple threads from accessing resource

c# - 我如何使用来自 C# 的参数 BSTR* 和 BSTR** 调用遗留 C++ DLL 接口(interface)方法

c++ - 如何删除 move 赋值运算符并保​​持与标准容器的兼容性?

c++ - 应用程序窗口样式

c++ - 我想删除 txt 文件中以 %% ( C++) 开头的一些行

java - opencv pyrDown() 对javacv 的相等方法是什么?

c++ - 在 VTable 上下文中,虚拟方法调用和直接方法调用有什么区别?

C++ 用零填充二维数组