私はリストを返す文字列入力を伴うこの関数sentanceParseを持っています。入力は "こんにちは私の名前はアントンです。あなたの名前は何ですか?"戻り値は "Hello my name is Anton"と "What's your name?"を含むリストになります。しかし、これは何が起こるかではありません。文中の空白が区切り文字のように扱われているので、返り値は、私が期待していたものではなく、 "Hello"、 "my"、 "name"などと思われます。リスト内の空白文字列はありますか?
私はこれをどのように解決することを提案しますか?
私はこの問題は私のコード内に存在しません、私もポストにそれを追加します100%を確認していないとして:
メイン:
list<string> mylist = sentanceParse(textCipher);
list<string>::iterator it;
for(it = mylist.begin(); it != mylist.end(); it++){
textCipher = *it;
cout << textCipher << endl; //This prints out the words separately instead of the entire sentances.
sentanceParse:
list<string> sentanceParse(string strParse){
list<string> strList;
int len = strParse.length();
int pos = 0;
int count = 0;
for(int i = 0; i < len; i++){
if(strParse.at(i) == '.' || strParse.at(i) == '!' || strParse.at(i) == '?'){
if(i < strParse.length() - 1){
while(i < strParse.length() - 1 && (strParse.at(i+1) == '.' || strParse.at(i+1) == '!' || strParse.at(i+1) == '?')){
if(strParse.at(i+1) == '?'){
strParse.replace(i, 1, "?");
}
strParse.erase(i+1, 1);
len -= 1;
}
}
char strTemp[2000];
int lenTemp = strParse.copy(strTemp, i - pos + 1, pos);
strTemp[lenTemp] = '\0';
std::string strAdd(strTemp);
strList.push_back(strAdd);
pos = i + 1;
count ++;
}
}
if(count == 0){
strList.push_back(strParse);
}
return strList;
}
ここでブーストを使用していない理由は何ですか?例えば、 'boost :: tokenizer'(http://www.boost.org/doc/libs/1_49_0/libs/tokenizer/index.html)があります。あなたの仕事は完璧にうまくいくでしょう。少し..スパルタン)。 – Xeo
実際には聞いたことがないので、私はそれをチェックします。 – Anton
基本的には、 'tokenizer>のようになります(strParse、char_seperator ("。!? ")); (自動&tok:toks){/ *各文を処理する... * /} ' –
Xeo