2017-09-24 9 views
-1

ファイルを読み込んで単語を尋ねるプログラムを作成しようとしています。次に、ファイルで使用された時間を出力します。変更した文字列を関数から返すにはどうすればよいですか?

これは、読んでいるファイル内にあるものである:

このファイルには、多くの単語が含まれています。多くの、多くの言葉。 まあ、それは結局のところ多分ではないかもしれません。 それで、どれだけたくさんありますか?

単語出現:

#include <iostream> 
#include <fstream> 
#include <algorithm> 
#include <string> 

using namespace std; 

string RemovePunct(string word) { 
    char exc = '!'; 
    char comma = ','; 
    char period = '.'; 
    char question = '?'; 
    for (int i = 0; i < word.length(); i++) { 
     if (word[i] == exc) { 
      word.pop_back(); 
     } 
     else if (word[i] == comma) { 
      word.pop_back(); 
     } 
     else if (word[i] == period) { 
      word.pop_back(); 
     } 
     else if (word[i] == question) { 
      word.pop_back(); 
     } 
    } 
    return word; 
} 

string ToLowercase(string word) { 
    transform(word.begin(), word.end(), word.begin(), tolower); 

    return word; 
} 

int main() { 
    string wo; 
    cin >> wo; 
    transform(wo.begin(), wo.end(), wo.begin(), tolower); 

    ifstream in("words.txt"); 

    int wordcount = 0; 

    string word; 

    while (in >> word) { 
     RemovePunct(word); 
     ToLowercase(word); 

     cout << word << endl; // used to check if 'word' has changed 

     if (word == wo) { 
      ++wordcount; 
     } 
    } 
    cout << wordcount << endl; 
    // outputs 4 
    // should output 6 

} 

あなたはそれがファイル内のすべての「多くの」を考慮していない見ることができるように。私は句読点を取って文字を小文字にしようとしましたが、変更された単語は私の主な機能に戻っていません。だから私はどこに間違っているかもしれないかについての助けを探しています。

+0

RemovePunct関数とToLowercase関数の戻り値を無視しています –

+0

どのように変更できますか? –

+0

'word = RemovePunct(word)' –

答えて

2

コードに重大なエラーがあります。 文字列自体ではなく、文字列のコピーを変更するために、文字列をRemovePunctメソッドとToLowercaseメソッドに値で渡すのではなく、参照で渡しています。あなたが今しているので

:編集

hereそれについていくつかの続きを読む

void ToLowercase(string & word) { 

void RemovePunct(string & word) { 

を:

次のようにあなたのメソッドの定義を変更する必要がありますthを通り過ぎる戻り値の型が無効になるので、両方のメソッドからreturn word;を省略する必要があります。

+0

それはそれでした!助けてくれてありがとう、私は間違いなくそれを読むでしょう。 –

0

機能RemovePunctおよびToLowercase変更された文字列を返しますが、決してそれを使用しません。

あなたは

word = RemovePunct(word); 
word = ToLowercase(word); 

にループ内のコードを変更したり、などの機能を作ることができ、次のいずれか

void RemovePunct (std::string& wo); 

void ToLowercase (std::string& wo); 

し、その後でreturn文を削除しますもう1つの答えとして2つの機能があります。

関連する問題