0

getline() 関数を使用して文の特殊文字と句読点を取得しているため、文に含まれる単語を表示すると、az (または AZ) 以外の文字は表示されません。問題は長くなってしまうことで、あまり効率的ではないと思います。効率の良い方法があれば教えていただきたいです。私は Dev-C++ を使用しています。以下のコードは C++ です。ご協力いただきありがとうございます。

#include <string>
#include <iostream>
#include <ctype.h>
#include <sstream>

using namespace std;



int main()
{
 int i=0;
 char y; 
 string prose, word, word1, word2;
 cout << "Enter a sentence: ";
 getline(cin, prose);

 string mot;
 stringstream ss(prose);


 y=prose[i++];
 if (y=' ')   // if character space is encoutered...


  cout<<endl << "list of words in the prose " << endl;
  cout << "---------------------------"<<endl;
  while(getline(ss, word, y))  //remove the space...
   {

      stringstream ss1(word);      

     while(getline(ss1, word1, ','))  //remove the comma...
       {

          stringstream ss2(word1);  //remove the period
          while(getline(ss2, word2, '.'))
           cout<< word2 <<endl; //and display just the word without space, comma or period.
       }
   }      


     cout<<'\n';
    system ("Pause");
    return 0;
}
#############################出力

文を入力してください: 何? 私が「ニコール、私のスリッパを持ってきて、ナイトキャップをくれ」と言うとき、それは散文ですか?

散文中の単語のリスト

何?私が「ニコールが私のスリッパを持ってきて、ナイトキャップをくれ」と言ったとき、それは散文ですか?

何かキーを押すと続行します 。. .

4

1 に答える 1

3

使用std::remove_if():

std::string s(":;[{abcd 8239234");

s.erase(std::remove_if(s.begin(),
                       s.end(),
                       [](const char c) { return !isalpha(c); }),
        s.end());

C++11 コンパイラがない場合は、ラムダを使用する代わりに述語を定義します (オンライン デモhttp://ideone.com/NvhKq )。

于 2012-09-12T08:16:10.903 に答える