2016-05-29 8 views
0

次の配列の各色をそれぞれ1回だけ印刷する方法はありますか?私が探している 出力は RED BLUE WHITE ようなものです...文字列の一部を印刷する

char *my_array[20]={"RED","BLUE","WHITE","BLUE","YELLOW","BLUE","RED","YELLOW","WHITE","BLUE","BLACK","BLACK","WHITE","RED","YELLOW","BLACK","WHITE","BLUE","RED","YELLOW"}; 
+1

「const char *」を使用すると、意図しないリテラルの変更を防ぐことができます。 –

+0

'my_array'の一意の値へのポインタの配列を作成し、それらを出力します。 –

+0

確かに、私が探していた答えは、他の投稿にありました....重複して申し訳ありません... –

答えて

0

あなたがそれらを並べ替える場合は、最後の繰り返しの要素が前の要素であったかどうかをチェックし、それを印刷することができますそうでない場合は、このような検索を続けます

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

int 
compare(const void *const str1, const void *const str2) 
{ 
    return strcmp(str1, str2); 
} 

int 
main(void) 
{ 
    const char *my_array[20] = { 
     "RED", "BLUE", "WHITE", "BLUE", "YELLOW", "BLUE", "RED", 
     "YELLOW", "WHITE", "BLUE", "BLACK", "BLACK", "WHITE", 
     "RED", "YELLOW", "BLACK", "WHITE", "BLUE", "RED", 
     "YELLOW" 
    }; 
    const char *last; 
    size_t count; 

    count = sizeof(my_array)/sizeof(*my_array); 
    if (count == 0) // What? 
     return -1; 
    qsort(my_array, count, sizeof(*my_array), compare); 

    last = my_array[0]; 
    for (size_t i = 1 ; i < count ; ++i) 
    { 
     if (strcmp(last, my_array[i]) == 0) 
      continue; 
     fprintf(stdout, "%s\n", last); 
     last = my_array[i]; 
    } 
    // The last one 
    fprintf(stdout, "%s\n", last); 
    return 0; 
} 
関連する問題