/*
* 删除一个字符串中出现次数最少的字符,函数原型为:char * delChar(char *s,int iLen)
*
* 输入】s为输入字符串,iLen为输入字符串长度
如输入字符串为“abcdd”,输出为"dd"
字符串中只有小写字母,不含空格且字符串最大长度不超过20
* */
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
int whetherInVisit(char s, char *visit)
{
int i = 0;
while(visit[i] != '\0')
{
if(visit[i] == s)
return i;
else
i++;
}
return -1;
}
int whetherIsLitte(unsigned int i, char * count, unsigned int len)
{
int j = 0;
for(; j < len; j++)
{
if(i > count[j])
return 0;
}
return 1;
}
char * delChar(char *s, int iLen)
{
char visit[MAX]; //以出现字符
char count[MAX]; //存放各字符的个数
char * retStr = (char *)malloc(MAX+1);
int i = 0, len_Str = 0, position, j = 0;
// int k = 0;
visit[0] = '\0';
//统计个字符出现的次数
for(; i < iLen; i++)
{
position = whetherInVisit(s[i], visit);
if(position == -1)
{
count[len_Str] = 1;
visit[len_Str] = s[i];
len_Str++;
visit[len_Str] = '\0';
}
else
{
count[position]++; //出现次数加1
}
}
// for(; k < len_Str; k++)
// {
// printf("count[%d] = %d\n", k, count[k]);
// }
//删除字符
for(i = 0; i < iLen; i++)
{
position = whetherInVisit(s[i], visit);
if(whetherIsLitte(count[position], count, len_Str) == 0)
{
retStr[j] = s[i];
j++;
}
}
retStr[j] = '\0';
return retStr;
}
int main()
{
char str[MAX];
char * retStr;
int iLen = 0, i = 0;
printf("请输入字符串:");
scanf("%s",str);
if(str != NULL)
{
while(str[i] != '\0')
{
iLen++;
i++;
}
retStr = delChar(str, iLen);
printf("删除后的字符串:%s",retStr);
}
printf("\n");
return 0;
}
删除一个字符串中出现次数最少的字符
最新推荐文章于 2023-09-11 12:09:01 发布