字符串中数字与整型数字的转化

Posted Adalight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串中数字与整型数字的转化相关的知识,希望对你有一定的参考价值。

ASCLL码

整数0的ASCLL码为48;
A-Z:65-90;
a-z:97-122;

前言

遇到这样的一道语法题
image
image

类似的,表达式的求值,例如:1+2 。如果用整型数组储存,那么字符就不会显示;如果用字符数组储存,那么‘1’和1又不相等。到底怎么合理的转化而又不增加繁琐的判断呢?
看到这样的一段代码

//代码片段
c -= \'0\';			//将字符转化成对应数值

到底是怎么回事,仔细想了想,也就明白了。

转换

其实在字符中的‘1’~‘9’其对应的ASCII码值并不是1- 9,而是:
image
可以发现,‘1’ - ‘0’ 对应的ASCII码值为1;
‘2’ - ‘0’ 对应的ASCII码值为2 ;…以此类推,字符串中的数字可以近似表示为‘x’ - ‘0’ = x (其中x为0 ~ 9 中的一个)。

代码实现

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
	int ch;
	long long num = 0;
	long long temp;
	int is_overflow = 0;

	const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
	const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);


	cout << "请输入等待转换的字符串:";
	do
	{
		ch = getchar();
		if (ch >= \'0\'&&ch <= \'9\')
		{
			temp = 10 * num + (ch - \'0\');
			if (temp > max_int || temp < min_int)
			{
				is_overflow = 1;
				break;
			}
			else
			{
				num = temp;
			}
		}
		else
		{
			if (num)
			{
				break;
			}
		}
	}
	while (ch != \'\\n\');
	if (is_overflow)
	{
		cout << "数值超出范围,结果未定义" << endl;

    }
	else
	{
		if (!num)
		{
			cout << "并未找到任何数值" << endl;
		}
		else
		{
			cout << "结果是" << num << endl;
		}
	}

	system("pause");
	return 0;
}

以上是关于字符串中数字与整型数字的转化的主要内容,如果未能解决你的问题,请参考以下文章

课程作业01(参数求和)

c语言,用循环的方法将字符串“123”转化成数字123,应该怎样写?

java中,String字符串转化为数字

C# 中 将IP字符串转换为整型

Java 16进制字符串转化成十六进制数字

为啥C语言编程时输入数字转化为了ASC码