2017-10-20 11 views
-1

文字列に重複した文字を表示するためにC++でコードを書きましたが、文字が3回以上繰り返されると、繰り返し文字が複数回出力されます。文字列に重複文字を表示する

たとえば、文字列がaaaddbssの場合は、adsを出力するだけで、代わりにaaadsが出力されます。

私は間違っていますか?

cout << " Please enter a string" << endl; 

cin.getline(input, 100); // example input (ahmad wahidy) the output reads a a h a d instead of a h d 

for (int i = 0;input[i]!='\0'; i++) 
{ 
    for (int j = i+1;input[j]!='\0'; j++) 
    { 
     if (input[i] == input[j]) 
     { 
      cout << input[i] << " "; 
     } 
    } 

} 
cout << endl; 
+1

これはおそらくC++ですか?これは 'input'のようなものの定義がありません。完全な例にしてください。私は 'input'が' std :: string'ではないという気持ちがあります。これは生の文字バッファを使うのは悪い計画なのですべきです。 – tadman

+1

Eric Lippertの[小さなプログラムのデバッグ方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を読んでからデバッガを使用してコードを1行ずつステップ実行します。問題が何であるかは非常に明白です。 –

+0

@ inputman 'input'は' std :: string'にすることはできません。 'cin'は' std :: string'を受け入れる 'getline'メソッドのオーバーロードを持っていません。 –

答えて

3

独自のカスタムメソッドを使用する代わりに、簡潔で標準的な方法を使用してください。テキストとstd::string input考える

、これはユニークな文字が印刷されます:

std::set<char> unique(input.begin(), input.end()); 
for (auto & c : unique) 
{ 
    std::cout << c << " "; 
} 
std::cout << std::endl; 
1

あなたがstd::countstd::setを使用することができます。

#include <string> 
#include <set> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    string s = "hellohowareyou"; 
    set<char>the_set(s.begin(), s.end()); 
    for (char i:the_set) 
     if (count(s.begin(), s.end(), i) > 1) 
      cout << i << endl; 


} 

出力:

e 
h 
l 
o 
0

あなたの場合mapを使用することはできません(おそらくsetを使用することも許されていません)、可能な各char値に対して1つのエントリを持つ整数の配列を使用して、出現回数をカウントするだけです。文字はASCII値として扱われると、配列のインデックスとして直接使用できます。ただし、負のインデックスを避けるには、各文字の値を最初に符号なしの値に変換する必要があります。

#include <iostream> 
#include <limits> 

int main() { 

    const char* input = "aaaddbss"; 
    int occurrences[UCHAR_MAX+1] = { 0 }; 
    for (int i = 0;input[i] !='\0'; i++) 
    { 
     unsigned char c = input[i]; 
     if (occurrences[c]==0) { 
      occurrences[c]++; 
     } 
     else if (occurrences[c]==1) { 
      occurrences[c]++; 
      cout << "duplicate: " << c << endl; 
     } 
    }cout << endl; 
} 
関連する問題