【C編程練習】2013華爲校園招聘機試題目題5:將一個int類型的數字轉化爲字符串,並判斷有無重複字符串(長度應大於2)有返回1,無返回2

//ex1_function2.cpp 
// 源作者:曹玲玲   編於2012-09-12
//【題目】2013華爲校園招聘機試題目題5:將一個int類型的數字轉化爲字符串,並判斷有無重複字符串(長度應大於2)有返回1,無返回2
 
#include <stdio.h>
#include <stdlib.h>
#define MAX 200
 
int ItoAandRepeat(unsigned int theNum,char *s)
{
  char Str[MAX];
  char Repeat[MAX];
  int interg,remainder,i=0,j,z=0,k=0,temp;
  //數字轉換成字符串
  remainder=theNum%10;
  interg=theNum/10;
  while(interg)
  {
    Str[i]=remainder+48;
    i++;
    remainder=interg%10;
    interg=interg/10;
  }
  Str[i]=remainder+48;
  i++;
  Str[i]='\0';
  for(z=0,j=i-1;j>=0;j--,z++)
  {
    s[z]=Str[j];
  }
 
  s[z]='\0';
  printf("%d轉換成字符串爲:%s\n",theNum,s);
  //判斷有無重複字符串
  for(i=0;s[i]!='\0';i++)
  {
    //判斷之前是否出現過該字符
    for(j=0;j<i;j++)
    {
      //出現過,從此位置開始向後判斷,有多少位重複
      if(s[j]==s[i])
      {
        z=i;
        z++;
        j++;
        temp=1;//第一次重複
        while(s[j]==s[z]&&s[z]!='\0')//繼續判斷
        {
          z++;
          j++;
          temp++;
        }
        if(temp>1)//重複字符數大於1
        {
          for (k=0;k<temp;k++,i++)
          {
            Repeat[k]=s[i];//複製重複的字符串便於打印
 
          }
          Repeat[k]='\0';
          printf("%s有重複字符串,重複字符串爲:%s\n",s,Repeat);
          return 1;
        }
      }
    }
 
  }
  return 2;
 
}
 //測試主函數
void ItoAandRepeat_Main()
{
  int number,temp1,re;
  char s[MAX];
  printf("請輸入一個整數!\n");
  temp1=scanf("%d",&number);
  while(temp1==1)
  {
    re=ItoAandRepeat(number,s);
    printf("re=%d\n",re);
    printf("\n請輸入下一個整數!\n");
    temp1=scanf("%d",&number);
  }
}


運行結果

【結果分析】

輸入3334時,判斷重複字符串,顯示是有的,此時認爲第二個3即存在於前一個“33”也存在於後一個“33”。

如果想避免此情況出現(不許與某個字符在兩個子串中出現)修改上述代碼中

  while(s[j]==s[z]&&s[z]!='\0')//繼續判斷

        {

          z++;

          j++;

          temp++;

        }

修改爲

  while(s[j]==s[z]&&s[z]!='\0'&&j<i)//繼續判斷

        {

          z++;

          j++;

          temp++;

        }

即可

此時運行結果爲

 

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