【C編程練習】華爲2013校園招聘機試題目題4:刪除一個字符串中出現次數最少的字符,函數原型爲:char * delChar(char *s,int iLen)

//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

給出更簡便的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章