c++ 删除数组中重复的名称
c++ Deleting duplicated Names in array
编辑:非常感谢大家,宋元瑶回答了我的问题,你们做了哈哈,但我不知道你放的一些代码,我确定很快我会学会它们:)再次感谢。
我真的有一个关于删除字符串中重复名称的问题,请注意,我对 c++ 相当陌生,无论如何我会进入正题。IM 试图做的是删除数组中的重复名称,下面的代码工作正常,但这就是我面临的问题。例如,我输入了 4 个名字:(Hana、Alex、Hana、Alex(我想得到的结果只是:(Hana 和 Alex(,而其他 2 个名字应该被删除,但我得到的是(Hana、Alex、Alex(。我真的很困惑我应该怎么做才能解决这个问题,我希望它检查列表中的每个名字,提前谢谢:)。
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
string nurse[4];
int i, n=3, j, k, num;
int main()
{
cout << "Please Enter names to add to the list --->";
for (i = 0; i <= n; i++)
{
cin >> nurse[i];
}
for (int i = 0; i < n; i++)
{
for (j = i + 1; j < n;)
if (nurse[j] == nurse[i])
{
for (k = j; k < n; k++)
{
nurse[k] = nurse[k + 1];
}
n--;
}
else
{
j++;
}
}
cout << "Printing list after removing duplicated names" << endl;
for (i = 0; i <= n; i++)
cout << " "<<nurse[i] << endl;
system("pause");
return 0;
}
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// ...
vector<string> nurses;
nurses.push_back("Hana");
nurses.push_back("Alex");
nurses.push_back("Hana");
nurses.push_back("Alex");
sort(nurses.begin(), nurses.end());
const vector<string>::iterator it = unique(nurses.begin(), nurses.end());
nurses.erase(it, nurses.end());
假设你从
vector<string> v{"alex", "emma", "alex"};
使用以下项定义unordered_set
:
unordered_set<string> h;
现在使用 erase
- remove
成语使用
[&h](const string &s){return !h.insert(s).second;};
这将在(预期的(线性时间内完成工作。
完整示例:
#include <string>
#include<vector>
#include <unordered_set>
#include <algorithm>
using namespace std;
int main()
{
vector<string> v{"alex", "emma", "alex"};
unordered_set<string> h;
auto r = [&h](const string &s){return !h.insert(s).second;};
v.erase(remove_if(begin(v), end(v), r), end(v));
}
> 你条件在for
比元素计数少一个,所以根本不会检查最后一个元素。
for (int i = 0; i <= n; i++)
~
{
for (j = i + 1; j <= n;)
~
if (nurse[j] == nurse[i])
{
for (k = j; k <= n; k++)
~
{
nurse[k] = nurse[k + 1];
}
n--;
}
else
{
j++;
}
}
您实际上并没有从数组中删除名称。你只是在移动它们,以防万一同名来了!
您实际上可以使用自动为您执行此操作的std::set
!
std::set< std::string > nurses;
std::string nurse;
for (i = 0; i <= n; i++)
{
std::cin >> nurse;
nurses.insert( nurse );
}
不要忘记在代码中包含<set>
。
相关文章:
- 你能帮我解决删除数组 c++ 中重复值的挑战吗?
- 删除[i] 数组和删除数组 [i] 之间的区别
- 如何实现删除数组的功能?
- 删除数组 c++ 崩溃问题
- 如何删除数组列表中的元素
- C++删除数组只会解除分配第一项
- 删除数组成员的更好方法是什么?
- 如何使用 deleteEntry 函数 c++ 删除数组中的单个字符串
- 删除数组中所有出现的数字 C++
- C++ 删除数组时检测到堆损坏
- 不允许删除数组的一部分,为什么
- 如何删除数组中第一次出现的值
- 当我删除数组时,指针在哪里?指向数组的指针与数组中的元素之间的区别
- 尝试用C 中的空地址(而非null)删除数组指针
- 为什么 std::remove 不删除数组的最后一个元素
- 如何使用c++删除数组中的一些值
- 仅删除数组的第一个元素
- 删除数组时断言失败
- 如何并行删除数组中的零值
- 访问指针数组/通过另一个指针并删除数组中的单个元素而不删除第一个指针或整个数组