我有这个函数sentanceParse与一个字符串输入返回一个列表。输入内容可能类似于“你好,我叫安东,你叫什么名字?”然后返回值将是一个包含“你好我的名字是安东”和“你叫什么名字?”的列表。但是,这不是发生了什么。看起来好像句子中的空格被当作分隔符对待,因此返回值相当“你好”,“我的”,“名字”等等,而不是我所期望的。列表中有空白的字符串?
你会如何建议我解决这个问题?
由于我不是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 2012-02-28 01:39:32
从来没有听说过它,我会检查出来。 – Anton 2012-02-28 01:40:01
基本上,它看起来像'标记生成器> toks(strParse,char_seperator () “!?”); for(auto&tok:toks){/ *处理每个句子... * /}' –
Xeo
2012-02-28 01:44:34