首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

H口试程序(7):去掉字符串中重复的数

2013-09-12 
H面试程序(7):去掉字符串中重复的数之前的答案只能把字符串中不同的数字字符显示出来,现在这个可以把重复

H面试程序(7):去掉字符串中重复的数

之前的答案只能把字符串中不同的数字字符显示出来,现在这个可以把重复的字符从字符串中去掉

 

#include<stdio.h>#include<assert.h>#include<memory.h>#include<stdlib.h>//50minvoid RemoveAllDuplicates(char seq[ ], int n){   assert(seq);int * phash = (int *)malloc( 10*sizeof(int) ); //因为如果是字符串里面的数字 为0~9,只需要映射10个数字到hash的空间存放就行了memset(phash,0,10*sizeof(int));int j = 0;for(int i = 0; i <n-1; i++ ){   if( phash[seq[i] -'0'] == 0)  //若相应位的hash位置为0,说明未出现过 seq[i] -'0':字符到数字的转化{phash[seq[i]-'0'] = 1;if(i!=j)   //正常情况下,i!=j的情况下就是说明中间有一些数是重复的seq[j] = seq[i];j++; // j++后表示里面存放的是下一个没有出现过的数字}else   //若相应位的hash位置为1,说明出现过,i继续向后面扫描,j留在原地等待存放下一个没有出现过的数字{           continue;}       }seq[j] = '\0'; //最后一个结束符  }int main(){    //char seq[] = { '5','3','3','8','5','6','8','\0'};   char seq[100];  //输入数字字符串gets(seq);    RemoveAllDuplicates(seq, sizeof(seq)/sizeof(char));  //源代码直接写的8,这样写比较好   printf("%s", seq);    return 0;  }

 

 

之前的答案:

#include<stdio.h>   #include<string.h>   #include<stdlib.h>   #include<assert.h>void RemoveAllDuplicates(int seq[], int n)  {      int *pHash = (int*)malloc(sizeof(int)*n);assert(pHash);  //判断申请空间是否成功    memset(pHash,0,sizeof(pHash)*n);  //将申请的空间进行初始化    int i;     for(i = 0;i < n;++i)  {         pHash[seq[i]]++;   //数组中的数出现一次就在pHash中对应位置加1         if(1 == pHash[seq[i]] )   //若在pHash中只出现一次,则输出,否则跳过,检查下一个数       {            printf("%d/t",seq[i]);         }  }    free(pHash);   }  int main()  {      int seq[] = { 5,3,4,2,3,2,2,5};    RemoveAllDuplicates(seq, sizeof(seq)/sizeof(int));  //源代码直接写的8,这样写比较好     return 0;  }



 

热点排行