zoukankan      html  css  js  c++  java
  • 删掉重复的数据

    一)过滤重复的数据。即把原来重复的数据过滤,只保留一份。

    例如:int a[]={1,3,4,3,2,5,2};
    输出:1 3 4 2 5

    ①实现方法一(采用STL):

    1. #include <iostream>  
    2. #include <algorithm>     
    3. #include <set>  
    4.   
    5. using namespace std;  
    6.   
    7. void Dedup(FILE* infile,FILE* outfile)  
    8. {  
    9.     int iTemp;  
    10.     unsigned int nCount = 0;  
    11.   
    12.     typedef set<int> IntSet;  
    13.     IntSet iArray;  
    14.   
    15.     while(NULL == feof(infile))  
    16.     {  
    17.         fscanf(infile,"%d",&iTemp);  
    18.         iArray.insert(iTemp);  
    19.   
    20.         nCount ++;  
    21.     }  
    22.   
    23.     printf("nCount = %d ",nCount);//total numbers  
    24.          
    25.     for(IntSet::iterator iter = iArray.begin(); iter != iArray.end(); ++ iter)  
    26.     {  
    27.         fprintf(outfile,"%d ",*iter);  
    28.     }  
    29.   
    30. }  
    31.   
    32. int main()  
    33. {  
    34.     FILE *fpInput,*fpOutput;  
    35.   
    36.     if(NULL == (fpInput = fopen("D:\input.txt","r")))  
    37.     {  
    38.         printf("File read error! ");  
    39.         exit(1);  
    40.     }  
    41.   
    42.     if(NULL == (fpOutput = fopen("D:\output.txt","w")))  
    43.     {  
    44.         printf("File write error! ");  
    45.         exit(1);  
    46.     }  
    47.   
    48.     Dedup(fpInput,fpOutput);      
    49.     printf(" ");  
    50.   
    51.     fclose(fpInput);  
    52.     fclose(fpOutput);  
    53.   
    54.     return 0;  
    55. }  

    ②实现方法二(采用STL):

    1. #include <iostream>  
    2. #include <algorithm>       
    3. #include <vector>    
    4.   
    5. using namespace std;  
    6.   
    7. void Dedup(FILE* infile,FILE* outfile)  
    8. {  
    9.     int iTemp;  
    10.     unsigned int nCount = 0;  
    11.   
    12.     vector<int> iArray,iRes;  
    13.   
    14.     while(NULL == feof(infile))  
    15.     {  
    16.         fscanf(infile,"%d",&iTemp);  
    17.         iArray.push_back(iTemp);  
    18.   
    19.         nCount ++;  
    20.     }  
    21.   
    22.     printf("nCount = %d ",nCount);//total numbers  
    23.   
    24.     sort(iArray.begin(), iArray.end());//sort   
    25.   
    26.     unique_copy(iArray.begin(), iArray.end(),back_inserter(iRes));//去掉重复的  
    27.          
    28.     for(vector <int>::const_iterator iter = iRes.begin(); iter != iRes.end(); ++ iter)  
    29.     {  
    30.         fprintf(outfile,"%d ",*iter);  
    31.     }  
    32. }  
    33. int main()  
    34. {  
    35.     FILE *fpInput,*fpOutput;  
    36.   
    37.     if(NULL == (fpInput = fopen("D:\input.txt","r")))  
    38.     {  
    39.         printf("File read error! ");  
    40.         exit(1);  
    41.     }  
    42.   
    43.     if(NULL == (fpOutput = fopen("D:\output.txt","w")))  
    44.     {  
    45.         printf("File write error! ");  
    46.         exit(1);  
    47.     }  
    48.   
    49.     Dedup(fpInput,fpOutput);  
    50.     printf(" ");  
    51.   
    52.     fclose(fpInput);  
    53.     fclose(fpOutput);  
    54.   
    55.     return 0;  
    56. }  

    ③实现方法三(采用STL):

    1. #include   <iostream>   
    2. #include   <string>   
    3. #include   <vector>   
    4. #include   <set>   
    5. #include   <algorithm>   
    6.   
    7. using namespace std;  
    8.   
    9. template <typename T>   
    10. void print_element(T value)   
    11. {   
    12.     cout<<value<<" ";   
    13. }   
    14.   
    15. template <typename T>   
    16. unsigned int MakeUniqueArray1(T* array, unsigned int length)   
    17. {   
    18.     set<T> s(array, array + length);   
    19.     //copy(s.begin(), s.end(), array);   
    20.   
    21.     printf("%d Number1. ",s.size());  
    22.     return s.size();   
    23. }  
    24.   
    25. template <typename T>   
    26. unsigned int MakeUniqueArray2(T* array, unsigned int length)   
    27. {   
    28.     vector<T> v(array, array + length);   
    29.     sort(v.begin(), v.end());   
    30.   
    31.     T* end = unique_copy(v.begin(), v.end(), array);   
    32.   
    33.     printf("%d Number2. ",end - array);  
    34.   
    35.     return end - array;   
    36. }   
    37.   
    38. int main()   
    39. {   
    40.     int a[] = {0,1,2,3,4,5,6,7,8,9,0,9,8,7,6,5,4,3,2,1};   
    41.       
    42.     unsigned int len = sizeof(a) / sizeof(int);  
    43.   
    44.     len = MakeUniqueArray1(a, len);   
    45.     len = MakeUniqueArray2(a, len);   
    46.       
    47.     void (*pfi)(int) = print_element;   
    48.     for_each(a, a + len, print_element<int>);   
    49.          
    50.     printf(" ");  
    51.     return 0;   
    52. }  

    ④C++ 普通实现方法

    1. #include <stdio.h>  
    2.   
    3. int* XRemove(int *Src, int Size,int *Dst, int &nSize)  
    4. {  
    5.     bool* Index = new bool[Size];  
    6.   
    7.     for(int i = 0; i < Size; ++i)  
    8.         Index[i] = true;  
    9.   
    10.     int* Crt = Dst;      
    11.   
    12.     nSize = 0;  
    13.     for(int x = 0; x < Size; ++x)  
    14.     {  
    15.         if(0 == Index[x])  
    16.             continue;  
    17.   
    18.         for(int y = x + 1; y < Size; ++y)  
    19.             if(Src[x] == Src[y])  
    20.                 Index[y] = false;  
    21.   
    22.         if(Index[x]){  
    23.             nSize ++;  
    24.             *Crt++ = Src[x];  
    25.         }  
    26.     }  
    27.   
    28.     delete [] Index;  
    29.     return Dst;  
    30. }  
    31.   
    32. void main()  
    33. {  
    34.     int Src[]={1,3,4,3,2,5,2};  
    35.   
    36.     int Size = sizeof(Src) / sizeof(int);  
    37.     int *Dst =  new int [Size];  
    38.   
    39.     int nSize;  
    40.     XRemove(Src, Size, Dst, nSize);  
    41.   
    42.     for(int i = 0;i < nSize;i ++)  
    43.         printf("%d ",Dst[i]);  
    44.   
    45.     printf(" ");  
    46. }  

    二)去掉重复出现的数字

    例如:int a[]={1,3,4,3,2,5,2};

    输出:1 4 5

    C++ 实现方法:

    1. #include <stdio.h>  
    2.   
    3. int* XRemove(int Dst[], int Src[], int Size,int &nSize)  
    4. {  
    5.     bool* Index = new bool[Size];  
    6.   
    7.     for(int i = 0; i < Size; ++i)  
    8.         Index[i] = true;  
    9.   
    10.     int* Crt = Dst;  
    11.     bool Sig;  
    12.   
    13.     nSize = 0;  
    14.     for(int x = 0; Sig = (x < Size); ++x)  
    15.     {  
    16.         if(Index[x] == 0)  
    17.             continue;  
    18.   
    19.         for(int y = x + 1; y < Size; ++y)  
    20.             if(Src[x] == Src[y])  
    21.                 Sig = Index[y] = false;  
    22.   
    23.         if(Sig){  
    24.             nSize ++;  
    25.             *Crt++ = Src[x];  
    26.         }  
    27.     }  
    28.   
    29.     delete [] Index;  
    30.     return Dst;  
    31. }  
    32.   
    33. void main()  
    34. {  
    35.     int Src[]={1,3,4,3,2,5,2};  
    36.   
    37.     int Size = sizeof(Src) / sizeof(int);  
    38.   
    39.     int *Dst =  new int [Size];  
    40.   
    41.     int nSize;  
    42.   
    43.     XRemove(Dst,Src, Size,nSize);  
    44.   
    45.     for(int i = 0;i < nSize;i ++)  
    46.         printf("%d ",Dst[i]);  
    47.   
    48.     printf(" ");  
    49. }  

    小结:使用vector容器可以很快解决。看来还是要多掌握一些知识和技术,拓宽自己的研究。有些问题也许用另一种方法,其实很简单,执行效率也很高。那么,我们为何不尝试一下呢?从中想想,要注意的问题?

    来源:http://blog.csdn.net/tianmohust/article/details/7027713

  • 相关阅读:
    跨域资源共享 CORS 详解
    Vue.js 与 Laravel 分离
    Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js
    移动端web及app设计尺寸
    另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新
    vue2.0 keep-alive最佳实践
    教你用Cordova打包Vue项目
    oracle_数据处理
    oracle_集合函数
    oaracel 函数_行转列
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3366824.html
Copyright © 2011-2022 走看看