1

ここに来るのは初めてで、C++ の初心者です。テキストファイルから読み込んでいるときに、句読点で文を分割する方法を知りたいです。

すなわち

hey how are you? The Java is great. Awesome C++ is awesome!

結果は、私のベクターでは次のようになります (ベクターの各コンテンツを表示するために endl を配置したと仮定します):

  • 元気かい?
  • Javaは素晴らしいです。
  • 素晴らしい C++ は素晴らしいです。

これまでの私のコードは次のとおりです。

vector<string> sentenceStorer(string documentOfSentences)
{
ifstream ifs(documentOfSentences.c_str());
string word;
vector<string> sentence;
while ( ifs >> word )
{

    char point = word[word.length()-1];
    if (point == '.' || point == '?' || point == '!')
    {

        sentence.push_back(word);
    }
}
 return sentence;

}

void displayVector (vector<string>& displayV)
{
    for(vector<string>::const_iterator i = displayV.begin(); i != displayV.end(); ++i )
    {
        cout << *i <<endl;
    }
}


int main()
{
    vector <string> readstop = sentenceStorer("input.txt");
    displayVector(readstop);
    return 0;
}

ここに私の結果があります:

  • あなた?
  • すごい。
  • 驚くばかり!

前の単語を取得できず、それを修正できなかった理由を説明できますか?

4

1 に答える 1

1

手がかりを教えます。while ステートメントでは、or 句に 3 つの条件があります。したがって、それらのいずれかがステートメントよりも満たされている場合は、while他のステートメントをチェックしないでください。したがって、それはあなたの最初のものを取り、 を探します。(ドット)。そして、それを見つけた後、それを に読み込むwordので、実際にはクエスチョン マークを省略します。これを解決するには、他の方法を見つける必要があるようです。もし私があなたなら、行全体を読み、文字ごとに解析します。私に関する限り、区切り文字で単語を分割する組み込みの文字列関数はありません。

于 2013-03-03T20:59:45.343 に答える