У меня есть функция sentanceParse со строковым вводом, который возвращает список.На входе может быть что-то вроде «Здравствуйте, меня зовут Антон. Как вас зовут?»и тогда возвращаемым значением будет список, содержащий «Привет, меня зовут Антон» и «Как тебя зовут?».Однако это не то, что происходит.Кажется, что пробелы в предложениях обрабатываются как разделитель, и поэтому возвращаемое значение скорее «Hello», «my», «name» и т. Д. Вместо того, что я ожидал.
Как бы вы предложили, чтобы я решил эту проблему?
Поскольку я не уверен на 100%, что проблема не в моем коде, я добавлю это и к сообщению:
Main:
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;
}