c语言提出不同的字符

输入数据有多组,每组数据给出一个字符串 S ,如果 S 中的每个字符都是一样的,请输出“YooQ mei you pian wo”,否则请找出字符串 S 中与其他字符不同的字符并输出它。输入数据保证如果存在不同的字符的话,这个字符有且只有一个。

输入格式
在第一行给出一个正整数 T(1<=T<=100) 。表示共有 T 组数据。

接下来 T 行,每行给出一个字符串 S(3<=∣S∣<=50) 。

输出格式:
对于每一组输入数据,输出一行,如果存在某个不同的字符,请输出这个字符,否则请输出“YooQ mei you pian wo”,不带引号。

输入样例:
3
2个a o 两个a
6个a
7个a一个q
输出样例:
o
YooQ mei you pian wo
q

img


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int has_difference(char *str)
{
    int i;
    int j;
    int len = strlen(str);
    for (i = 0; i < len; i++)
    {
        for (j = i + 1; j < len; j++)
        {
            if (str[i] != str[j])
            {
                return j;
            }
        }
    }
    return -1;
}

int main()
{
    int line = 0;
    scanf("%d", &line);

    char **strs = (char **)malloc(sizeof(char *) * line);
    for (int i = 0; i < line; i++)
    {
        strs[i] = (char *)malloc(sizeof(char) * 50);
        scanf("%s", strs[i]);
    }

    for (int i = 0; i < line; i++)
    {
        int res = has_difference(strs[i]);
        if (res != -1)
        {
            printf("%c\n", strs[i][res]);
        }
        else
        {
            printf("YooQ mei you pian wo\n");
        }
    }

    for (int i = 0; i < line; i++)
    {
        free(strs[i]);
    }

    free(strs);

    return 0;
}

下面是我的一个实现,供参考:


#include <stdio.h>
//https://ask.csdn.net/questions/7657383?spm=1005.2025.3001.5141
int main(void){
    
    int N;
    char S[51];
    int i=0,j=0;
    int startReadChar = 0;
    int same= 0;
    char ch1=0,ch2=0;
    
    scanf("%d",&N);
    
    while(i<N){
        scanf("%s",S);
        
        ch1=0;
        ch2=0;
        while(S[j]!='\0'){
            
            
            
            if(ch1!=S[j]&&ch1!=0){
                ch2=S[j];
                break;
            }
                        
            ch1 = S[j];
        
            
//            if(S[j]>='a'&&S[j]<='z'&&startReadChar==0){
//                printf("1,ch1=%c,ch2=%c,S[%d]=%c,charIsSame=%d\n",ch1,ch2,j,S[j],charIsSame);
//                ch1 = S[j];
//                startReadChar=1;
//            }
//            
//            if(S[j]>='a'&&S[j]<='z'&&ch1!=S[j]&&ch1!=0){
//                printf("2,ch1=%c,ch2=%c,S[%d]=%c,charIsSame=%d\n",ch1,ch2,j,S[j],charIsSame);
//                ch2=S[j];
//                break;
//            }
            j++;
        }
        
        if(ch1!=ch2&&ch2!=0){
        //    printf("3 ch1=%c,ch2=%c\n",ch1,ch2);
            printf("%c\n",ch2);
        }
        
        if(ch1==S[0]&&ch2==0){
        //    printf("4 ch1=%c,ch2=%c\n",ch1,ch2);
            printf("YooQ mei you pian wo\n");
        }
        
    
        i++;
    }
    
    return 0;
    
} 

//输入数据有多组,每组数据给出一个字符串 S ,如果 S 中的每个字符都是一样的,请输出“YooQ mei you pian wo”,
//否则请找出字符串 S 中与其他字符不同的字符并输出它。输入数据保证如果存在不同的字符的话,这个字符有且只有一个。
//输入格式
//在第一行给出一个正整数 T(1<=T<=100) 。表示共有 T 组数据。
//接下来 T 行,每行给出一个字符串 S(3<=∣S∣<=50) 。
//输出格式:
//对于每一组输入数据,输出一行,如果存在某个不同的字符,请输出这个字符,否则请输出“YooQ mei you pian wo”,不带引号。
//输入样例:
//3
//aaoaa
//aaaaaa
//aaaaaaaq
//输出样例:
//o
//YooQ mei you pian wo
//q
#pragma warning(disable:4996) //开头加这句或项目、属性、配置属性、C/C++、预处理器、预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”
#include <stdio.h>
char *judge(char *s) {
    char *p;
    static char t[50+1];
    static char c[256];
    int i,maxc;

    p=s;
    for (i=0;i<256;i++) c[i]=0;
    while (1) {
        if (*p==0) break;
        c[(unsigned int)(*p)]++;
        p++;
    }
    maxc=0;
    for (i=0;i<256;i++) if (maxc<c[i]) maxc=c[i];
    if (maxc==1) {
        sprintf(t,"%s",s+1);
    } else {
        p=t;
        while (1) {
            if (*s==0) break;
            if (c[(unsigned int)(*s)]==1) *p++=*s;
            s++;
        }
        *p=0;
    }
    if (t[0]==0) sprintf(t,"YooQ mei you pian wo");
    return t;
}
int main() {
    static char S[100][50+1];
    int T,i;
    scanf("%d",&T);
    for (i=0;i<T;i++) {
        scanf("%s",S[i]);
    }
    for (i=0;i<T;i++) {
        printf("%s\n",judge(S[i]));
    }
    return 0;
}
//输入
//3
//aaoaa
//aaaaaa
//aaaaaaaq
//输出
//o
//YooQ mei you pian wo
//q
//