gpt4 book ai didi

c - 警告指针和整数之间的数组比较

转载 作者:行者123 更新时间:2023-11-30 20:28:59 24 4
gpt4 key购买 nike

所以我遇到了这个问题,我必须输入一个只有小写字母的未知大小的字符串,然后输出不同字母的数量。这是主程序

#include <stdio.h>
#include <ctype.h>
int test(char *T);
int main(){
char T[100];int i=-1,j=0,nd=0;
do{
gets(T);

}while((test(T))==1);
do {
i++;
j=i;
do{j++;

}while ((T[i]!=T[j])||((T[j])!=""));
if (T[j]=="")
nd++;
}while (T[i+1]!="");

这是我的功能测试

int test(char *T){
int i=-1,s;
do {
i++;

}while (((islower(T[i])==1))||(T[i]==""));
if ((T[i]=="")&&(i!=0))
s=0;
else s=1;
return s;
}

问题是,每次我比较数组 T 的字符时,我都会收到很多警告“整数和指针之间的比较”,但我不知道如何解决这个问题。非常感谢您的帮助。

更新:所以我尝试按照您的建议修复程序,这是新的主程序

#include <stdio.h>
#include <ctype.h>
int test(char *T);
int main(){
char T[100];int i=-1,j=0,nd=0;
do{
gets(T);

}while((test(T))==1);
do {
i++;
j=i;
do{j++;

}while ((T[i]!=T[j])||((T[j])!='\0'));
if (T[j]=='\0')
nd++;
}while (T[i+1]!='\0');
printf("%d",nd);}

这是功能测试

int test(char *T){
int i=-1,s;
do {
i++;

}while (((islower(T[i])==1))||(T[i]=='\0'));
if ((T[i]=='\0')&&(i!=0))
s=0;
else s=1;
return s;
}

我不再收到警告,程序编译也没有问题,但在执行中输入字符串后什么也没有发生。

最佳答案

如果字符串仅包含小写字母,则函数 test 应返回 1,否则返回 0。不幸的是,它并没有这样做。

您应该首先测试该字符是否是字母,然后测试它是否是小写字母。或者更有效的是,您测试字符是否在“a”到“z”范围内。

代码的另一个问题是使用 do while 循环,这使得代码难以理解并执行一次循环。

这是 test 函数的更好实现:

int test(char *T){
// reject empty strings
if(T[0] == '\0')
return 0;
// reject strings containing non lowercase letter
for(int i = 0; T[i] != '\0'; i++)
if((T[i] < 'a') || (T[i] > 'z'))
return 0;
// string is not empty and contains only lowercase letters
return 1;
<小时/>

通过使用 for 循环而不是 go while 循环,可以使对不同字母的计数更具可读性。

int nd = 0;
for(int i = 0; T[i] != '\0'; i++) {
for(int j = 0; j < i; j++) {
if(T[j] == T[i])
break; // quit inner loop
nd++;
}
}

此代码检查每个字母并查看它以前是否见过。因此它与你的不同。

代码中的问题是测试 (T[i]!=T[j])||((T[j])!='\0')。它应该是 && 而不是 ||,并且应该首先执行测试是否到达字符串末尾。测试应为 (T[j]!='\0')&&(T[i]!=T[j])

关于c - 警告指针和整数之间的数组比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59499628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com