顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍
#include
#include
#define s 100
int main() {
char str[s],str1[s];
gets(str);
for(int i=0;i<strlen(str);i++){
if(str[i]>='A'&&str[i]<='Z'){
int j=0,pd=0;
for(int x=0;xif(str1[x]==str[i])
pd=1;
}
if(pd==0){
str1[j]=str[i];
j++;
}
}
}
puts(str1);
return 0;
}
输出结果是一串乱码,应该是str1的赋值出了问题
把变量j的赋值提到for循环之前即可,即让数组str1循环存储不同的大写字母,然后存储完所有大写字母,给str1字符数组结尾添加一个字符串结束字符空字符('\0')即可。修改如下:
#include <stdio.h>
#include <string.h>
#define s 100
int main() {
char str[s]={},str1[s]={};
gets(str);
int j=0,pd=0;
for(int i=0;i<strlen(str);i++){
if(str[i]>='A'&&str[i]<='Z'){
pd=0;
for(int x=0;x<strlen(str);x++){
if(str1[x]==str[i]){
pd=1;
}
}
if(pd==0){
str1[j]=str[i];
j++;
}
}
}
puts(str1);
return 0;
}
供参考:
#include <stdio.h>
#include <string.h>
int main()
{
int flag = 0, i;
char str[80];
int arr[130] = { 0 };
gets(str);
for (i = 0; i < strlen(str); i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
{
if (!arr[str[i]])
{
arr[str[i]]++; //计数
printf("%c", str[i]);
}
flag = 1;
}
}
if (flag == 0)
printf("Not Found");
return 0;
}