gpt4 book ai didi

c++ - 列表中有空格的字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:48 25 4
gpt4 key购买 nike

我有这个函数 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.

句子解析:

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;
}

最佳答案

你的句子解析实现是错误的,这里有一个更简单的正确解决方案。

std::list<std::string> sentence_parse(const std::string &str){
std::string temp;
std::list<std::string> t;

for(int x=0; x<str.size();++x){
if(str[x]=='.'||str[x]=='!'||str[x]=='?'){
if(temp!="")t.push_back(temp);//Handle special case of input with
//multiple punctuation Ex. Hi!!!!
temp="";
}else temp+=str[x];
}
return t;
}

编辑:

这是使用此功能的完整示例程序。在您的控制台中输入一些句子,按回车键,它会用换行符而不是标点符号将句子吐出。

#include <iostream>
#include <string>
#include <list>
std::list<std::string> sentence_parse(const std::string &str){
std::string temp;
std::list<std::string> t;

for(int x=0; x<str.size();++x){
if(str[x]=='.'||str[x]=='!'||str[x]=='?'){
if(temp!="")t.push_back(temp);//Handle special case of input with
//multiple punctuation Ex. Hi!!!!
temp="";
}else temp+=str[x];
}
return t;
}
int main (int argc, const char * argv[])
{
std::string s;

while (std::getline(std::cin,s)) {
std::list<std::string> t= sentence_parse(s);
std::list<std::string>::iterator x=t.begin();
while (x!=t.end()) {
std::cout<<*x<<"\n";
++x;
}

}

return 0;
}

关于c++ - 列表中有空格的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com