//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++;
}
即可
此時運行結果爲