c语言有关数组的问题

顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍

#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;
}

img

供参考:

#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;
}