/**
**
** 题目:删除一个字符串中出现次数最少的字符,函数原型为:
**
** char * delChar(char *s,int iLen)
**
** 其中 s为输入字符串,iLen为输入字符串长度。
**
** 如输入字符串为“abcdd”,输出为"dd"。
**
** 字符串中只有小写字母,不含空格且字符串最大长度不超过20。
**/
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *delChar(char *s,int iLen) ;
int main(void)
{
char str[] = "abadccdehigiktk";
int iLen = strlen(str)/sizeof(char);
char *tmp = delChar(str,iLen);
printf("%s\n",tmp);
return 0;
}
char *delChar(char *s,int iLen)
{
if (NULL == s || iLen < 0)
{
return NULL;
}
int i = 0;
/*
一共有26个字母,数组的最大数值为26
min存放字符中最少的个数
*/
const int MAXLEN = 26;
int min, nCountTable[MAXLEN];
/*
初始化
*/
for (i = 0; i < MAXLEN; i++)
{
nCountTable[i] = 0;
}
/*
计算得出现有的字符数目;
*/
for (i = 0; i < iLen; i++)
{
(nCountTable[*(s+i) - 'a'])++;
}
for (i = 0; i < MAXLEN; i++)
{
printf("%3d", nCountTable[i]);
}
putchar('\n');
i = 0;
//找出数组中的一个不等于0的值
while(nCountTable[i] == 0)
{
i++;
}
/*
求出min值
*/
min = nCountTable[i];
for (i = 0; i < MAXLEN; i++)
{
if (nCountTable[i] != 0)
{
if (nCountTable[i] < min)
{
min = nCountTable[i];
}
}
}
/*
将字符串中字符非最少的字符存放在一个临时变量中,并给出地址。
*/
char *temp;
i = 0;
temp = (char *) malloc(iLen * sizeof(char));
while(*s != '\0')
{
if (nCountTable[*s - 'a'] != min)
{
*(temp + i) = *s;
i++;
}
s++;
}
*(temp + i) = '\0';
return temp;
}
删除一个字符串中出现次数最少的字符
最新推荐文章于 2023-08-10 22:15:21 发布