为什么写成s[j]==‘0’才行。s[j]==0 不行?
为什么score是局部变量,写在函数里运行就成功了?
s是字符指针,自然不能用int赋值
【以下回答由 GPT 生成】
问题优化后描述正确。下面是关于这两个问题的解答:
问题1:为什么写成s[j] == '0'才行。s[j] == 0 不行?
回答1:在C语言中,字符 '0' 表示字符型的数字0,而整数0表示整型的数字0。在条件判断语句中,使用双等号(==)进行比较。当你写成 s[j] == '0' 时,表示判断字符串s中第j个字符是否等于字符型的数字0,如果相等则条件成立。而当你写成 s[j] == 0 时,表示判断字符串s中第j个字符是否等于整型的数字0,这就涉及到字符型和整型的比较,因此结果可能不是你期望的。
以字符串s为例,当你需要判断s[j]是否为字符型的数字0时,使用 s[j] == '0' 是正确的写法。如果你要判断s[j]是否为整型的数字0,应该使用 s[j] - '0' == 0,其中减法操作将字符型的数字0转换为整型的数字0,然后再与整型的数字0进行比较。
问题2:为什么score是局部变量,写在函数里运行就成功了?
回答2:在C语言中,变量的作用域可以分为全局变量和局部变量。全局变量可以在程序的任何地方访问,而局部变量只能在定义它的代码块内部访问。局部变量在定义时会在内存中分配空间,当它所在的代码块执行结束后,这些内存空间会被释放。
在你提到的情况中,将score定义为局部变量是正确的做法。这是因为你可能在函数中需要使用一个存储计算结果的变量,而这个变量只在函数内部使用,并且不会对其他部分产生影响。将score定义为局部变量可以使代码更清晰、易读,并且能够避免变量名冲突的问题。
总结:以上是对你提出的问题的解答。如果你还有其他问题或需要进一步的解释,请随时告诉我。
因为 s 是字符串,s[j] 是字符 ‘0’ 或 ‘1’,不是数值 0 或 1,score 要在for( ) 循环里复位,修改如下,改动处见注释,供参考:
#include <stdio.h>
#define Max(a, b) ((a) > (b) ? (a) : (b)) // 修改
int maxScore(char *s)
{
int max = 0, score;
for (int i = 0; s[i] != '\0'; i++) // 修改
{
score = 0; // 修改
for (int j = 0; j < i; j++){
if (s[j] == '0')
score++;
}
for (int j = i; s[j] != '\0'; j++){ // 修改
if (s[j] == '1')
score++;
}
max = Max(max, score);
}
return max;
}