C语言,如何去除字符串数组中的重复元素 1C

定义char a[6][32]={"AAA","BBB","CCC","CCC","CCC,"DDD"},
如何去除数组a中的重复字符串元素?去百度找了找什么双重循环的方法,但是如果有连续3个数一样就会出问题。有没有哪位大佬给指教一下?如果能提供代码希望能测试一下

c

2个回答

 // test1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

#define STR_NUM 11

bool contain(int num, int flag[], int count)
{
    for (int i = 0; i < count; ++i)
    {
        if (flag[i] == num)
            return true;
    }
    return false;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int flag[STR_NUM] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };//标记哪些字符串重复了,重复的取大的索引值
    int i = 0;

    char a[STR_NUM][32] = { "AAA", "BBB", "CCC", "CCC", "CCC", "DDD", "DDD", "EEE", "FFF", "DDD", "GGG" };

    char res[STR_NUM][32] = {};

    for (int n = 0; n < STR_NUM; ++n)
    {
        for (int m = n + 1; m < STR_NUM; ++m)
        {
            if (strcmp(a[n], a[m]) == 0)
            {
                flag[i++] = m;
            }
        }
    }

    //这样循环以后,flag内就存储了重复的字符串的索引

    i = 0;
    for (int n = 0; n < STR_NUM; ++n)
    {
        if (!contain(n, flag, STR_NUM))
        {
            strcpy_s(res[i], a[n]);
            cout << "res[" << i << "]:" << res[i] << endl;
            i++;
        }
    }

    cin.get();
    return 0;
}

经测试可以实现你的需求

没有考虑效率的问题。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问