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

本文介绍了一个C语言程序,该程序可以去除字符串中的重复数字字符,仅保留首次出现的数字。通过使用哈希表来跟踪已出现的数字,从而实现高效处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

#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;  
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值