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
相关产品推荐
相关产品推荐

