#include
#include
main()
{ char a[100];
char b[100];
char c[500];
int i,k,u,n,x;
for(i=0;i<26;i++)
b[i]+='a'+i;
gets(a);
k=strlen(a);
x=0;
n=0;
for(i=0;i
{for(u=0;u<26;u++)
if(a[i]!=b[u])
x++;
if(x==26)
{c[n]=a[i];
n++;
}
}
printf("%c",c);
}
你x忘记了归零,到这里归零就好了
#include<stdio.h>
#include<string.h>
int main() {
char a[100] = {0};
char b[100] = {0};
// 输入
gets(a);
// 获取输入长度
int k = strlen(a);
int j = 0 ;
// 在字符长度内 包括 '\0' 结尾符 遍历
for( int i = 0 ; i <= k ; i++ ){
// 如果是小写啥都不干
if( a[i] <= 'z' && a[i] >= 'a' ){
} else {
// 不是小写就复制到 b
b[j] = a[i];
// b的长度 +1
j++;
}
}
printf("%s", b);
}
只输出一个字符的bug需要这样改:思路看注释吧:
#include<stdio.h>
#include<string.h>
//main返回值类型默认给个int
int main()
{ char a[100];
char b[100];
char c[500];
int i,k,u,n,x;
for(i=0;i<26;i++)
b[i]='a'+i;
gets(a);
k=strlen(a);
n=0;
for(i=0;i<k;i++)
{
x=0;//解决你原来只显示一个字母的bug,处理完第一个输入字符,你不在这里清零,第二个字符的时候 x跑飞了你也没机会==26了,自然c变量就存不到第二个字符了。
for(u=0;u<26;u++)
if(a[i]!=b[u])
x++;
if(x==26)
{c[n]=a[i];
n++;
}
}
//打印字符串要用%s
printf("%s",c);
//表示main方法正常终止。
return(0);
}
(1)b[i] += 'a' + i; 这里,b数组没有初始化,直接用 b[i] = 'a' + i; 就可以了
(2)c是数组,输出的时候printf中的%c改成 %s,数组没有正确结尾,char c[500]这里改成 char c[500]={0};
(3)for循环里,需要重置x,在外层for循环中添加一句 x = 0.
完整代码如下(修改部分有注释):
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
char b[100];
char c[500]={0};
int i, k, u, n, x;
for (i = 0; i < 26; i++)
b[i] = 'a' + i; // += 改成 =
gets(a);
k = strlen(a);
x = 0;
n = 0;
for (i = 0; i < k; i++)
{
x = 0; //这里重置x
for (u = 0; u < 26; u++)
if (a[i] != b[u])
x++;
if (x == 26)
{
c[n] = a[i];
n++;
}
}
printf("%s", c); //%c改成%s
}
最后的printf("%c",c)里面的c 只是一个数组名,c[0]或者把%c改为%s才可以正常输出
#include<stdio.h>
#include<string.h>
main()
{ char a[100];
char b[100];
char c[500];
int i,k,u,n,x;
for(i=0;i<26;i++)
b[i]+='a'+i;
gets(a);
k=strlen(a);
x=0;
n=0;
for(i=0;i<k;i++)
{for(u=0;u<26;u++)
if(a[i]!=b[u])
x++;
if(x==26)
{c[n]=a[i];
n++;
}
}
printf("%c",c);
}