Дан массив из строчных латинских букв. Вывести на экран в алфавитном порядке все буквы, которые входят в этот текст по одному разу — C++(Си)

#include <stdio.h>
 
const int alph_length = 26;
 
 
int main() {
    int i;
    char text[81];
    char *p;
 
    int letters_encountered[alph_length];
 
    for(i = 0;i< alph_length ; i++ ) 
         letters_encountered[i]=0;
 
    fgets(text,80,stdin);
 
    p = text;
 
    while(*p!=0) {
        if(*p< 'a' || *p > 'z') {
 
            p++;
            continue;
        };
 
        letters_encountered[*(p++) -'a']++;
    };
 
    for(i=0;i<alph_length;i++) { 
        if(letters_encountered[i]==1)
            printf("%c",'a'+(char)i);
 
    };
    return 0;
 
};

Следующий вариант

#include<stdio.h>
 
int Comp(const void* a, const void* b){
    return *(char*)a-*(char*)b;
}
 
int main(){
    char text[]="fghbnggnawqxw", *p=text;
    qsort(text, sizeof(text)-1, sizeof(*text), Comp);
    for(; *p; ++p){
        if(*p==*(p+1)){
            while(*p==*(p+1))++p;
        }
        else{
            printf("%c", *p);
        }
    }
    return 0;
}

Следующий вариант

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
int Compare(const void* a, const void* b){
    return *(char*)a-*(char*)b;
}
 
int main(){
    char *matr[]={{"abcemn"},
                   {"fedkpo"},
                   {"ghijqr"},
                   {"xwvuts"},
                   {"yzaala"}}, res[100]={'\0'}, i, *a=res, *b=res;
    for(i=0; i<sizeof(matr)/sizeof(*matr); i++){
        strcat(res, matr[i]);
    }
    qsort(res, strlen(res), sizeof(*res), Compare);
    for(; *b=*a; ++a){
        if(*a!=*(a+1))++b;
    }
    puts(res);
    return 0;
}

Leave a Comment