C语言‘expected expression’错误修复:isupper函数使用问题
问题修复方案
核心错误拆解
- 语法错误:
char* letterExtract = char* isupper(word[i]);里赋值右侧不能加char*,属于完全错误的语法写法。 - 类型与逻辑不匹配:
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
相关产品推荐
相关产品推荐

