//ex1_function2.cpp
// 源作者:曹玲玲 編於2012-09-12
//【題目】華爲2013校園招聘機試題目題4:刪除一個字符串中出現次數最少的字符,函數原型爲:char * delChar(char *s,int iLen)
//【輸入】s爲輸入字符串,iLen爲輸入字符串長度
// 如輸入字符串爲“abcdd”,輸出爲"dd"
// 字符串中只有小寫字母,不含空格且字符串最大長度不超過20
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
//判斷字符S是否在字符串visit中,是返回位置,不是返回-1
int whetherInVisit(char s,char* visit)
{
int i=0;
while(visit[i]!='\0')
{
if (visit[i]==s)
return i;
else
i++;
}
return -1;
}
//判斷數i,是否是數組array中的最小數,是返回1,不是返回0
int whetherIsMini(unsigned int i,unsigned int * array,unsigned int aLen)
{
unsigned int temp=0;
for(temp=0;temp<aLen;temp++)
{
if (i>array[temp])
return 0;
}
return 1;
}
char* delChar(char *s,int iLen)
{
unsigned int Count[MAX];//存放各字符出現的次數
char visit[MAX];//已出現字符的存儲
int i=0,Len_visit=0,posotion,j=0;
char * ReStr=(char *)malloc(MAX+1);//存放刪除後的字符串
visit[0]='\0';
//統計各個字符出現的次數
for (i=0;i<iLen;i++)
{
posotion=whetherInVisit(s[i],visit);
if(posotion==-1)
{
Count[Len_visit]=1;
visit[Len_visit]=s[i];
Len_visit++;
visit[Len_visit]='\0';
}
else
{
Count[posotion]++;
}
}
//刪除字符
for (i=0;i<iLen;i++)
{
posotion=whetherInVisit(s[i],visit);//查找其位置,用於讀取其出現的次數
if(whetherIsMini(Count[posotion],Count,Len_visit)==0)//不是次數最少的
{
ReStr[j]=s[i];
j++;
}
}
ReStr[j]='\0';
return ReStr;
}
void delChar_Main()
{
char s[MAX];
int iLen=0,i=0;
char *NEW;
printf("請輸入一組字符串,最長爲20個字符\n");
while (gets(s)!=NULL)
{
while(s[i]!='\0')
{
iLen++;
i++;
}
NEW=delChar(s,iLen);
printf("刪除最少字符後爲:\n");
puts(NEW);
printf("\n請輸入下一組字符串,最長爲20個字符,輸入其他字符退出\n");
}
}
運行結果
http://blog.csdn.net/nixindong1984/article/details/7964555
給出更簡便的方法