英単語を判定してlistに入れる
Posted: 2015年11月07日(土) 22:33
C++始めたばかりの初心者です。
作るプログラムは、文章を単語ごとに読む(英単語であり、数字などは無視。ピリオドやコンマは単語に含めない)。それが初めて単語であればlistに加えて単語の出現回数を1とする。また同じ単語が読まれた場合はlistに追加する代わりに出現回数を1とする。最後は単語をアルファベット順にソートするといった感じです。
また文章の最初は大文字ですが、大文字の単語も小文字の単語の場合と等しいとする。
私なりに作ってみましたが、未完成な上に間違いも多々あると思われます。
#include <iostream>
#include <string>
#include <list>
#include <cwctype>
using namespace std;
list<string> split(const string& s){
list<string> word;
string_size i = 0;
while(i != s.size()){
while(i != s.size() && isspace(s)) ++i;
string_size j = i;
while(j != s.size() && !isspace(s[j])) ++j;
if(i != j && std::iswalpha(s[j])){
{word.push_back(s.substr(i,j-i)); i = j;}
}
}
return word;
}
int main(){
string s;
int count = 0, i;
cin >> s;
list<string> word = split(s);
for(i = 0; i != NULL; i++){
cout << word << endl;
count++;
}
ご指摘ご回答、よろしくお願いします。
作るプログラムは、文章を単語ごとに読む(英単語であり、数字などは無視。ピリオドやコンマは単語に含めない)。それが初めて単語であればlistに加えて単語の出現回数を1とする。また同じ単語が読まれた場合はlistに追加する代わりに出現回数を1とする。最後は単語をアルファベット順にソートするといった感じです。
また文章の最初は大文字ですが、大文字の単語も小文字の単語の場合と等しいとする。
私なりに作ってみましたが、未完成な上に間違いも多々あると思われます。
#include <iostream>
#include <string>
#include <list>
#include <cwctype>
using namespace std;
list<string> split(const string& s){
list<string> word;
string_size i = 0;
while(i != s.size()){
while(i != s.size() && isspace(s)) ++i;
string_size j = i;
while(j != s.size() && !isspace(s[j])) ++j;
if(i != j && std::iswalpha(s[j])){
{word.push_back(s.substr(i,j-i)); i = j;}
}
}
return word;
}
int main(){
string s;
int count = 0, i;
cin >> s;
list<string> word = split(s);
for(i = 0; i != NULL; i++){
cout << word << endl;
count++;
}
ご指摘ご回答、よろしくお願いします。