c语言 输出字符串中的大写字母,不要重复输出。这是我写的,发现那个判断不重复的部分不对。帮我看看。
展开全部
你的程序有几个问题:
① 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等语句, 提示用户输入。。。
① 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等语句, 提示用户输入。。。
展开全部
#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);
}
这个是我改你的,有注释,共同进步!
#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);
}
这个是我改你的,有注释,共同进步!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询