C语言编程 输入一个以回车键结束的字符串(少于80个字符)。输出其中所出现过的大写英文字母.是出现过的

#include<stdio.h>
int main(void)
{
char str[80],y[26];
int i,j,ny=0;

printf("Enter a string:");
i=0;
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';

for(i=0;str[i]!='\0';i++)
if(str[i]>='A'&&str[i]<='Z')
{
for(j=0;j<ny;j++)
if (y[i]==str[i])
break;
if(i>=ny){
y[ny]=str[i];
ny++;}
}
printf("%c",str[i]);
else
printf("Not Found");

return 0;
}
求指导!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include<stdio.h>
int main(void)
{
char str[80], y[26];
int i, j, ny = 0;

printf("Enter a string:");
i = 0;
while ((str[i] = getchar()) != '\n')
i++;
str[i] = '\0';

for (i = 0; str[i] != '\0'; i++) {
if (str[i] >= 'A'&&str[i] <= 'Z')
{
for (j = 0; j < ny; j++)
if (y[j] == str[i])
break;
if (j >= ny){
y[ny] = str[i];
ny++;
}
}
}
y[ny] = 0;
if (ny != 0)
printf("%s", y);
else
printf("Not Found");

return 0;
}

追问

虽然连接和编译都没错误!但是执行不出来啊!!!!!

追答

追问

您的程序并没有错误,刚刚是我看错了,很抱歉!我刚试了下输入了重复的大写字母,运行会把大写字母重复输出!
例:FOR and FOR
仅输出FOR

追答

你真的运行过了吗?


追问

追答if(y[i]==str[i]) break; // 这里应该是 y[j] 而不是 y[i]

追问

啊啊啊啊啊啊啊啊啊啊啊啊 啊!好吧,灰常感谢,抱歉抱歉了!!!!!!!!!!!!!!!!!!!!!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-29
printf("Input a string:");

//getchar();这一句的getchar不要,如果有这一句,你输入的字符串中的第一个字母就被它所获取,str中是从第二个字母开始保存
第2个回答  2014-06-05
程序大概看了下 我的理解是你的意思是输出输入的一串字符中重复出现的大写字母,对吧?你表达的不是太清楚,你的做法你可以编译,测试啊。你应该想看看是不是有其他方法 是吧?追问

连接也不行的!其他方法也阔以的!

第3个回答  2014-06-05
什么思路,没看明白

不是把大写字母输出吗追问

如果有重复的大写字母,只输出一次!

追答

#include

int main(void)
{
char str[80],ch[27]={0};/*定义一个大写字符链,用来存出现过的大写字母,因为最多只有26个字符,所以定义成char ch[27],符值{0},会让每一个的值都为0*/
int i,j,k;
gets(str);
for(i=j=k=0;str[i];i++)
{
if(str[i]>='A'&&str[i]<='Z')/*判断是不是大写字母*/
{
for(j=0;ch[j];j++)/*对大写字符链循环比较*/
if(ch[j]==str[i])
break;/*如果存在这个字符就意外退出循环*/
if(j==k)/*如果是意外退出,j达不到尾部就退出的比较,此时j<k,如果链中不存在这个字符,j=k*/
ch[k++]=str[i];/*让大写字符链长度加一,并把新出现的字符加进去*/
}
}
puts(ch);
return 0;
}

相似回答