You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++字符串分割程序运行末尾出现乱码,如何修复?

C++字符串分割程序末尾乱码问题解决

你的程序出现末尾乱码是因为循环条件错误,具体问题出在seperatestring函数的循环判断语句:

for (int i = 0; i < str[str.size()-1] ; i++)

这里str[str.size()-1]获取的是字符串最后一个字符的ASCII值(比如最后一个字符是'd',对应ASCII值100),而非字符串的实际长度。当字符串长度小于这个ASCII值时,循环会超出字符串的有效范围,访问到内存中的随机垃圾数据,最终导致输出乱码。

修正方法

把循环条件改成遍历字符串的所有字符,使用字符串的长度作为判断依据:

for (int i = 0; i < str.size() ; i++)

修正后的完整代码

#include <iostream>
#include <cstring>
#include <cctype>
#include <string> // 建议显式包含string头文件,避免部分编译器报错

using namespace std;

void seperatestring(string str);

int main()
{
    string str;
    cout << "Enter a string: ";
    getline(cin, str);
    seperatestring(str);
    return 0;
}

void seperatestring(string str)
{
    string word = "";
    for (int i = 0; i < str.size() ; i++)
    {
        if (str[i] == ' ')
        {
            cout << word << endl;
            word = "";
        }
        else {
            word = word + str[i];
        }
    }
    cout << word << endl;
}

额外提示:当前代码虽能运行,但建议显式包含<string>头文件,避免部分编译器因隐式依赖抛出警告。

内容的提问来源于stack exchange,提问作者Ervin Pejo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:35:30