数字转换成字符串

描述:

将一个int类型的数字转化为字符串,并判断有无重复字符串(长度应大于2)有返回1,无返回2。

代码:

#include <iostream>
#define MAX 200
using namespace std;
int ltoAandRepeat(unsigned int num)
{
	char p1[MAX], p[MAX];
	int count = 0;
	int temp = num;
	//计算整数num几位数
	while (temp > 0)
	{
		temp /= 10;
		count++;
	}
	//整数转换成字符串
	temp = num;
	int i;
	for (i = 0; i < count; i++)
	{
		p1[i] = temp % 10+'0';
		temp /= 10;
	}
	for (i = 0; i < count; i++)
	{
		p[count - 1 - i] = p1[i];
	}
	p[count] = '\0';
	cout << p<<endl;

	//判断有无重复字符串
	int n = 0;
	int j;
	for (i = 0; i < count - 1; i++)
	{
		for (j = i + 1; j < count; j++)
		{
			if (p[i] == p[j]&&j>=i+2)	//不允许有重复的,如111不被认为是重复字符串
										// 如果允许,则if(p[i]==p[j])即可
			{
				if (p[++i] == p[++j])
					return 1;
			}
		}
	}
	return 2;
}

int main()
{
	int num;
	cin >> num;
	cout << ltoAandRepeat(num) << endl;
	cin.get();
	cin.get();
}

参考代码:

#include <iostream>
using namespace std;
#define MAX 200
int ltoAandRepeat(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';
	cout << theNum<<" has been transferred into a string: "<<s<<endl;

	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')// 实现可重叠的重复字符串
													// 实现无重叠的重复字符串,用while(s[j]==s[z]&&s[z]!='\0'&&j<i)
				{
					z++;
					j++;
					temp++;
				}
				if (temp > 1)
				{
					for (k = 0; k < temp; k++,i++)
					{
						Repeat[k] = s[i];
					}
					Repeat[k] = '\0';
					cout << s << " has duplicated sub-string(s), which is " << Repeat << endl;
					return 1;
				}
			}
		}
	}
	return 2;
}

int main()// 主函数
{
	int number, temp1, re;
	char s[MAX];
//	temp1=(cin >> number);
	temp1 = scanf("%d", &number);
	while (temp1 == 1)// 结束标志是EOF,即按Ctrl+C
	{
		re = ltoAandRepeat(number, s);
		cout << re << endl;
		printf("Please enter the next number: ");
		temp1 = scanf("%d", &number);
	}
	return 0;
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值