gpt4 book ai didi

c++ - 将输入的 char* 拆分为 vector

转载 作者:行者123 更新时间:2023-11-28 00:45:20 24 4
gpt4 key购买 nike

我已经创建了将 char* 拆分为 vector 的函数,但问题是在运行此方法后,此 vector 的所有元素都是输入行中的最后一个元素。

例子:

输入:abc def ghi

vector :ghi, ghi, ghi

vector <const char*> dane;
void split(char* str, char* sep){
char* cstr = str;//str.c_str konwersja str na char*
char* current;
current = strtok(cstr, sep);
string s;
while(current != NULL){
s = current;
int foundF = s.find_first_not_of("-.\"-\\/!,`");
int foundL = s.find_last_not_of("-.\"-\\/!,`");
if(foundL==string::npos)//find first or last zwrocilo nulla
foundL = s.length();
if(foundF==string::npos)
foundF = 0;
s = s.substr(foundF, foundL + 1);
const char* c = s.c_str();
dane.push_back(c);
current=strtok(NULL, sep);
}
}

int main(){
char* c = new char[256];
cin.getline(c,256);
cout<<c<<endl;
split(c, " ");
for(int i = 0; i < dane.size(); i++){
cout<<dane.at(i)<<endl;
}
return 0;
}

最佳答案

const char* c = s.c_str();
dane.push_back(c);

当然这可能会导致您得到什么,因为 s.c_str() 可以始终指向相同的位置。就我而言,这仅取决于 std::string 的实现 - 您正在存储和使用 C const char 指针 string::c_str() 在特定字符串实例失效后返回(作为赋值运算符的结果)——我相信您的程序调用了未定义的行为。

要进行的更改:

vector<string> dane;

然后删除

const char* c = s.c_str();

然后将下一行改为

dane.push_back(s);

现在您将拥有子字符串的拷贝(而不是指向它们的悬空指针),这将输出正确的结果。

关于c++ - 将输入的 char* 拆分为 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16494958/

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