Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中删除重复名称的方法_C++_Arrays - Fatal编程技术网

C++中删除重复名称的方法

C++中删除重复名称的方法,c++,arrays,C++,Arrays,编辑:非常感谢大家,宋元耀回答了我的问题,你们确实笑了,但我不知道你们写的一些代码,我相信很快我会学会的:再次感谢 我真的有一个关于删除字符串中重复名称的问题,注意到我对C++是相当新的,无论如何我都会说到重点。 我试图做的是删除数组中重复的名称,下面的代码工作正常,但我面临的问题如下。 例如,我输入了4个名字:Hana,Alex,Hana,Alex我想得到的结果是:Hana和Alex,而其他2个名字应该被删除,但我得到的是Hana,Alex,Alex。 我真的很困惑我该怎么做来解决这个问题,我

编辑:非常感谢大家,宋元耀回答了我的问题,你们确实笑了,但我不知道你们写的一些代码,我相信很快我会学会的:再次感谢

我真的有一个关于删除字符串中重复名称的问题,注意到我对C++是相当新的,无论如何我都会说到重点。 我试图做的是删除数组中重复的名称,下面的代码工作正常,但我面临的问题如下。 例如,我输入了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;
}
实际上,您并没有从数组中删除名称。你只是在移动它们,以防出现相同的名称

实际上,您可以使用一个std::set,它将自动为您执行此操作

std::set< std::string > nurses;
std::string nurse;
for (i = 0; i <= n; i++)
{
    std::cin >> nurse;
    nurses.insert( nurse );
}
不要忘记在代码中包含名称。

您实际上没有从数组中删除名称。你只是在移动它们,以防出现相同的名称

实际上,您可以使用一个std::set,它将自动为您执行此操作

std::set< std::string > nurses;
std::string nurse;
for (i = 0; i <= n; i++)
{
    std::cin >> nurse;
    nurses.insert( nurse );
}
不要忘了在代码中包含。

您的条件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++;
        }
}
您输入的条件比元素的计数少一个,因此最后一个元素根本不会被检查

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++;
        }
}
说你从

vector<string> v{"alex", "emma", "alex"};
现在使用

这将在预期的线性时间内完成工作

完整示例:

#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));
}
说你从

vector<string> v{"alex", "emma", "alex"};
现在使用

这将在预期的线性时间内完成工作

完整示例:

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


听起来像是一份工作!你还应该公布你面临的问题。那么,寻找解决方案就更容易了。例如,您的问题是程序没有在这里完成执行吗?也许是因为你在j=i+1时错过了一个j++;j