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

如何修复多字符常量错误?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:50:36