如何修复多字符常量错误?C++求最长单词长度代码问题
解决多字符常量警告与最长单词长度计算问题
你碰到的multi-character character constant警告,本质是字符串结束符的写法错误——你写的'/0'是两个字符(斜杠+数字0),而C++中表示字符串末尾空字符的转义符应该是'\0'(反斜杠+数字0),这才是单个字符的合法字符常量。
另外你的代码还有几个逻辑和标准兼容性问题,一起修正如下:
修正后的完整代码
#include <iostream> #include <algorithm> using namespace std; int main() { int n; cin >> n; cin.ignore(); // 跳过输入n后的换行符,避免getline读取空串 // 用动态分配替代C风格变长数组,符合C++标准 char* arr = new char[n + 1]; cin.getline(arr, n + 1); // 第二个参数传入数组总长度,确保能容纳终止符 int word_len = 0; int max_len = 0; int i = 0; // 循环到字符串结束符为止,避免越界 while (arr[i] != '\0') { // 遇到空格时,更新最长单词长度并重置当前计数 if (arr[i] == ' ') { max_len = max(max_len, word_len); word_len = 0; } else { word_len++; } i++; } // 循环结束后,还要检查最后一个单词的长度 max_len = max(max_len, word_len); cout << max_len << endl; delete[] arr; // 释放动态分配的内存 return 0; }
关键修正点说明
- 解决警告:将
'/0'替换为'\0',后者是C++标准的空字符转义符,属于单个字符常量,不会触发多字符警告。 - 兼容C++标准:用
new char[n+1]动态分配内存,替代非标准的变长数组char arr[n+1]。 - 正确读取输入:添加
cin.ignore()跳过输入n后的换行符,否则getline会直接读取空串;同时getline的第二个参数传入数组总长度n+1,确保能存储字符串终止符'\0'。 - 修复单词分割逻辑:原代码只在字符串结束时更新最长长度,无法分割中间的单词。现在遇到空格就更新最长长度,循环结束后还要检查最后一个单词的长度,保证结果正确。
内容的提问来源于stack exchange,提问作者Tushar
相关产品推荐
相关产品推荐

