c语言 输出字符串中的大写字母,不要重复输出。这是我写的,发现那个判断不重复的部分不对。帮我看看。

 我来答
splashchaos
2012-11-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3342
采纳率:0%
帮助的人:3666万
展开全部
你的程序有几个问题:
① t应该设置成27, 这样除了26的大写字母外, 最后一位可以给\0, 作为字符串的结尾;
② 你的思路是逐位检测s,发现符合要求的(大写字母), 检测是否在t中已存在? 如果没有才添加。 那么把j(t的序数)也放到for循环中是不合理的, 因为j只要在s中大写字符而且t中没有才会递增。
③ 逐一C89/90的标准中没有bool这个变量, C99中有,但需要头文件stdbool.h
因此例子修改如下(和楼上qhb198903133的思路基本一致):
{
char s[30]={0}, t[27]={0};
int i, j, k;
int found = 0;

gets(s);
j = 0;
for (i=0; i<strlen(s); i++)
{
if (s[i]>= 'A' && s[i] <= 'Z')
{
found = 0;
for (k=0; k<j; k++)
if (s[i] == t[k])
{
found = 1;
break;
}

if (!found)
{
t[j] = s[i];
j++;
}
}

}
t[j+1] = '\0';
puts(t);
return 0;


④ 中判断t中是否已存在大写字母, 其实可以用C标准库函数strchr来作:
char *pch;
gets(s);
j = 0;
for (i=0; i<strlen(s); i++)
{
if (s[i]>= 'A' && s[i] <= 'Z')
{
pch = strchr(t, s[i]);
if (pch == NULL)
{
t[j] = s[i];
j++;
}
}

}
t[strlen(t)] = '\0';

puts(t);
return 0;

}
这样也干净整齐些, 而且效率比前面的好。
⑤ gets前面最好添加printf等语句, 提示用户输入。。。
百度网友8f83ae5
推荐于2018-04-05 · TA获得超过263个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:140万
展开全部
#include "stdio.h"
#include "string.h"
void main()
{
char s[30]={'\0'},t[26]={'\0'};
int i,j,k;
bool has=false;//初始为没有重复
gets(s);
for(i=0,j=0;i<strlen(s);i++)
{
if(s[i]>'A'&&s[i]<'Z')//为大写字母
{
for(k=0;k<j;k++)
{
if(t[k]==s[i])//有相同的
{
has=true;
break;
}
}
if(!has)//没有相同的就添加
{
t[j]=s[i];
j++;
}
}
}
puts(t);
}

这个是我改你的,有注释,共同进步!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式