gpt4 book ai didi

c++ - 当我尝试在 C++ 中创建包含唯一元素的 vector 时发现不起作用

转载 作者:行者123 更新时间:2023-11-28 01:43:49 25 4
gpt4 key购买 nike

当我尝试创建一个包含唯一元素的 vector 时发现不起作用。

字符串首先被标记化,然后需要反转。但反转字符串中的元素必须是唯一的。

   #include <cstring>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
vector<char *> myvec;
string input;
getline(cin,input);
char *token = std::strtok((char *)input.c_str()," ");
while (token != NULL)
{
if(find(myvec.begin(), myvec.end(), token) != myvec.end())
cout<< "\n Skipping duplicate";
else
myvec.push_back(token);
token = std::strtok(NULL, " ");
}
cout<<endl;
while (!myvec.empty())
{
cout<<myvec.back();
myvec.pop_back();
cout<<" ";
}
cout<<endl;
}

Input: A bird came down the walk down END
Output: END down walk the down came bird A

Down should be removed from output as it is duplicate word.

最佳答案

问题是您存储的是指向 char 的指针,而不是字符串:

vector<char *> myvec;

代替

vector<string> myvec;

因此,当您编写输入时:

A bird came down the walk down END
^ ^

这两个“下”是不同的词,它们存储在内存的不同位置,因此它们的地址不同。

下面是一个类似的有效代码,但使用字符串:

string input;
getline(cin, input);

stringstream str;
str << input;

vector<string> v;
while (str >> input){
if (find(v.begin(), v.end(), input) == v.end())
v.push_back(input);
}

cout << '\n';

for(auto p = v.rbegin(); p != v.rend(); ++p)
cout << *p << ' ';

cout << '\n';

关于c++ - 当我尝试在 C++ 中创建包含唯一元素的 vector 时发现不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037156/

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