您的位置:首页 > 职场人生

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

2013-09-11 20:48 225 查看
之前的答案只能把字符串中不同的数字字符显示出来,现在这个可以把重复的字符从字符串中去掉

#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<stdlib.h>
//50min
void 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐