提取数字的每一位——字符串转化函数itoa

头文件<cstdlib>提供了将整数转化为2-36进制表示的字符串string,由此可按照2-36各进制,根据实际需要,提取整数的每一位。

函数原型:char * itoa(int value, char * string, int radix);
功能:将整数value转化成用radix进制表示的字符串string,进制radix必须在2-36位之间
返回值: 指向string的指针。
示例: char strDest[20];
           cout << itoa(3445, strDest, 10) << endl;
输出: 3445

若想使用此函数提取每一位,代码如下(若想将ASCII码值转化为数值,可以将其减'0'——str[i] - '0' 即为字符i的数值):

#include <iostream>
#include <cstdlib>
using namespace std;

char s[15];

int main()
{
	int n, k;
	while (cin >> n >> k) // n为数字,k为进制(2-36) 
	{
		itoa(n, s, k); // 按进制将n转化为数字字符串
		for (int i = 0; s[i] != '\0'; i++)
		{
			cout << s[i] - '0'; // s[i]为ASCII码值,s[i] - '0' 为该字符i对应的数值 
		}
		cout << endl;
	}
	return 0;
}

使用示例:实例:寻找肇事者
题目如下:一辆肇事汽车的号码是4位十进制数。目击者向交警描述这个车号:这是一个完全平方数;且此完全平方数的各位数字从左至右一个比一个大。请帮助交警寻找肇事者:你能帮助交警算出车号吗?

分析:先枚举1000-9999之间所有的完全平方数,事先定义一个字符数组str,再使用 itoa函数,按十进制将完全平方数n转换成字符串,并存放入在字符数组str中,进而判断n各位数字的大小关系(分别比较它们的ASCII码值即可),从而判断n是否符合题意。
代码如下:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
	int n, i, flag;
	char str[5];
	for (i = 32; i < 100; i++)
	{
		flag = 0;
		n = i * i;
		itoa(n, str, 10);
		for (int j = 0; j < 3; j++)
		{
			if (str[j] >= str[j + 1])
			{
				flag = 1;
			}
		}
		if (flag == 0)
			cout << n << endl;
	}
	cout << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41705423/article/details/79360824