lonmecy
lonmecy
采纳率14.3%
2017-07-19 09:16 阅读 5.3k

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

1

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • liuhannan111 HappyerMano 2017-07-19 09:56
     // 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;
    }
    
    

    经测试可以实现你的需求

    点赞 评论 复制链接分享
  • liuhannan111 HappyerMano 2017-07-19 09:56

    没有考虑效率的问题。

    点赞 评论 复制链接分享

相关推荐