2017-12-05 9 views
0

私は、ユーザーからの入力テキストを読み込んで、各単語をソートされた順序で繰り返した回数をプリントするプログラムを作ろうとしています。 (入力は空白で区切られており、句読点を入れることができますが、改行はありません)繰り返された回数に応じて入力テキストから単語をソートしますか?

入力の例:私は良いプログラマーであり、C言語が大好きです。

出力は次のようになります。

  • :2回
    I:1時間
    午前:1時間
    良い:1時間

    ...というように。

**入力用私はベクトルとクラスを使用しましたが、なぜその中にいくつかのアイテムをプッシュできないのか分かりません。

class word {public: 
word(); 
void set_data(string data_value); 
void printing_data(); 
void counter_addition(); 
int count; 
string data;}; 

int main(){ /*creating vecotr called items of list class type*/ 
vector<word>items; 

/*creating a variable of list class type which is used to push data into the vector*/ 

word *element; 

/*Reading the input text seperated by white spaces*/ 
int size = 0; 
string text; 

cout << "Enter the text: " << endl; 
getline(cin, text); 

size = text.length(); 
int left_space = -1; 
int right_space = 0; 
string Sub_String; 

/*main loop for constructing substring of words and then manipulating them*/ 

for (int i = 0; i<size; i++) 
{ 

    /*splitting the string into words*/ 
    if (isspace(text[i]) || ispunct(text[i])) 
    { 
     right_space = i; 

     Sub_String = text.substr(left_space + 1, right_space - left_space - 1); 
     /*for first word just push it*/ 

     if (left_space == -1) 
     { 
      element = new word(); 
      element->set_data(Sub_String); 
      items.push_back(*element); 

     } 

     else 
     { 
      /*compare to vector's data */ 
      for (int j = 0; j < items.size(); j++) 
      { 
       if (Sub_String == items[j].data) 
       { 
        items[j].count = items[j].count + 1; 
       } 
       else 
       { 
        element = new word(); 
        element->set_data(Sub_String); 
        items.push_back(*element); 
       } 

      } 
     } 
      left_space = right_space; 
    } 

単語が同じである場合、出力は正しいです。

入力:ライフライフライフライフ


出力:人生は繰り返し:4

私はプログラミングに新しいです。このを通して私を助けてください。

+0

基本的には、各単語(2つのループ)を繰り返し、(strcmp)とインクリメントカウンタを使って単語を比較してください。毎回新しい変数を作成するのではなく、構造体に文字列を格納して繰り返します。また、プログラミングの初心者であるため、効率性を目的としていないため、正しいコードを目指してください。したがって、サブストリングを使用するよりも処理が容易なため、ユーザー入力をファイルに格納してください –

答えて

2

std :: map < std :: string、int>に文字列の値とカウントを格納し、各単語について、マップ内に既に存在するかどうかを確認します。存在する場合は、カウントをインクリメントします。逆の場合count = 1で挿入してください。

関連する問題