如何从我的结构数组中删除重复项?

时间:2014-07-16 08:18:17

标签: c++-cli duplicates

这是我的代码,它从文件中读取结构。

int _tmain(int argc, _TCHAR* argv[])
{
    typedef struct
    {

        char  name_1[100];
        char Max_1[100];
        char Min_1[100];
    } power_line_name;
    int numLines;
    StreamReader ^ sr1=File::OpenText("testcpp\\test\\powerline.txt");
    while(sr1->ReadLine())
    {
        numLines++;
    }
    power_line_name* power_list=new power_line_name[numLines];
    //power_line_name power_list[5];
    StreamReader ^ sr=File::OpenText("testcpp\\test\\powerline.txt");
    array<System::String ^> ^power_line;
    array<System::String ^> ^d_line;
    String ^ eachString;
    String ^ eachString_2;
    String ^ eachString_3;
    int i=0;
    char nstring[100];
    try
    {
        String^ s="";
        while (s=sr->ReadLine())
        {
            power_line=s->Split(':');
            Console::WriteLine(s);
            d_line=power_line[1]->Split('|');
            for(int a=0;a<d_line->Length;a++)
            {
                pin_ptr<const wchar_t> wch = PtrToStringChars(d_line[a]);
                size_t origsize = wcslen(wch) + 1;
                size_t convertedChars = 0;
                if(a==0)
                {
                    wcstombs_s(&convertedChars, power_list[i].name_1, origsize, wch, _TRUNCATE);
                    strcat_s(power_list[i].name_1, " (char *)");
                }
                if(a==1)
                {
                    wcstombs_s(&convertedChars, power_list[i].Max_1, origsize, wch, _TRUNCATE);
                    strcat_s(power_list[i].Max_1, " (char *)");
                }
                if(a==2)
                {
                    wcstombs_s(&convertedChars, power_list[i].Min_1, origsize, wch, _TRUNCATE);
                    strcat_s(power_list[i].Min_1, " (char *)");
                }
            }
            i++;
        }

        Console::WriteLine(s);
    }
    finally
    {
        if(sr)
            delete (IDisposable^)(sr);
    }

    return 0;
}

这是它的输出:

power_list[0].name_1=aaaa

power_list[0].Max_1=1111111

power_list[0].Min_1=222222

power_list[1].name_1=aaaa

power_list[1].Max_1=333333

power_list[1].Min_1=444444

power_list[2].name_1=aaaa

power_list[2].Max_1=333333

power_list[2].Min_1=444444

power_list[3].name_1=aaaa

power_list[3].Max_1=33333

power_list[3].Min_1=66666

如果Max_1Min_1对于某些两个元素相同,我希望删除第二个元素。

所以新的输出将是:

power_list[0].name_1=aaaa

power_list[0].Max_1=1111111

power_list[0].Min_1=222222

power_list[1].name_1=aaaa

power_list[1].Max_1=333333

power_list[1].Min_1=444444

power_list[2].name_1=aaaa

power_list[2].Max_1=33333

power_list[2].Min_1=66666

我不知道该怎么办?

1 个答案:

答案 0 :(得分:0)

我不熟悉c ++ - cli语法,所以这是一种方法,用伪代码:

for i from 0 to n-1
    for j from i+1 to n-1
        if list[i].Max_1 == list[j].Max_1 and list[i].Min_1 == list[j].Min_1
            mark j as duplicate

for i from 0 to n-1
    if i is not marked duplicate
        output i

这似乎是最简单的方法。

另一种更复杂的方法:对数组进行排序;那么所有重复的条目都将相邻,这将使比较更容易。也许其他人会在另一个答案中描述这一点。