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

C语言‘expected expression’错误修复:isupper函数使用问题

问题修复方案

核心错误拆解

  1. 语法错误:char* letterExtract = char* isupper(word[i]); 里赋值右侧不能加char*,属于完全错误的语法写法。
  2. 类型与逻辑不匹配:isupper返回的是整数(非0代表字符为大写,0代表不是),不是指针,直接赋值给char*变量必然触发类型不兼容错误;另外你用单个字符(word[i]是char类型)去和字符串指针(ALPHABETS[j]是char*)比较,逻辑上不成立——单个字符和字符串地址没法直接等价匹配。

修复步骤

步骤1:优化字母数组定义(最关键)

原来的ALPHABETS用char*数组存单个字母完全没必要,改成char数组更合理,直接和单个字符比较:

char ALPHABETS[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

步骤2:修正字符提取与大写转换逻辑

用toupper函数把当前字符转为大写(注意要把word[i]转成unsigned char,避免处理带符号字符时的异常),直接存为char类型变量,不需要指针:

char letterExtract = toupper((unsigned char)word[i]);

步骤3:修正比较逻辑

现在letterExtract是char,ALPHABETS[j]也是char,直接用==比较即可:

if (letterExtract == ALPHABETS[j]) {
    totalScore += POINTS[j];
}

步骤4:补全缺失的代码闭合

你提供的代码片段少了两个},要补上循环和函数的闭合括号。

效率优化版完整函数

原来的嵌套两层循环效率很低,直接通过ASCII码差值计算字母在数组中的索引(比如'A'减'A'得0,对应POINTS[0]),可以省去内层循环:

int compute_score(string word){
    int totalScore = 0;
    int wordLen = strlen(word); // 把strlen放循环外,避免重复计算
    for (int i=0; i<wordLen; i++){
        char letterExtract = toupper((unsigned char)word[i]);
        if (letterExtract >= 'A' && letterExtract <= 'Z') {
            int index = letterExtract - 'A';
            totalScore += POINTS[index];
        }
    }
    return totalScore;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:17:29