您的位置:首页 > 编程语言

【C编程练习】2013华为校园招聘机试题目题5:将一个int类型的数字转化为字符串,并判断有无重复字符串(长度应大于2)有返回1,无返回2

2012-09-12 19:27 519 查看
//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++;

}

即可

此时运行结果为

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐