C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)

目录

一、前言

 二、什么是ACSII码?

 三、深度理解字符 - ‘0‘ 或者 + ‘0‘ 

四、实战演练

五、共勉


一、前言

      想必大家在刷题或者是看别人写的代码中,经常会遇到 s[i]-’0‘ 或者  s[i]+’0‘ 这个情况,初次遇到这种代码,肯定是一头雾水,被折磨的很难受,在网上找解法,大多都是一些结论,并没有实质性的讲清楚原理是什么?如何去应用?

      所以本次博客将从原理----->应用,给大家依次讲清楚(主要是我不会,怕自己忘记)字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别

 二、什么是ACSII码?

       ASCII码是一种用于表示字符的编码系统,它是计算机发展早期最常用的编码系统之一。 ASCII码的出现是为了解决计算机在处理文本时需要标准化字符表示的问题。 在ASCII码中,每个字符都被赋予了一个唯一的数值编码,这个编码是由7个二进制位组成的,因此ASCII码中总共可以表示128个不同的字符

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第1张图片


 ⚠ 注意:       

        用通俗的语言来讲,它是方便  字符数字(十进制) 进行交换的,所以叫 美国标准信息交换码

举例说明:

int main()
{
	// 定义一个字符
	char str = 'a';

	// 定义一个数字(十进制)
	int x = 65;

	printf("字符str的字符表示:%c  字符str的数字(十进制)表示:%d\n",str,str);

	printf("\n");

	printf("数字x的字符表示:  %c  数字x的数字(十进制)表示:  %d\n", x, x);

	return 0;
}

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第2张图片

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第3张图片

 三、深度理解字符 - ‘0‘ 或者 + ‘0‘ 

 代码演示:

int main()
{
	char str = '9';
	 
    int temp = str - '0';

	int temp1 = str + '0';

	printf("%c %d\n", temp,temp);

	printf("%c %d\n", temp1,temp1);

	return 0;
}

 运行结果:

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第4张图片

结果分析:

1.  str  和  ‘0’  都是字符  所以它们都遵从  ASCII  表的转换 

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第5张图片


2. 根据ASCII表得出

  • str + '0' 的十进制数 结果为:57 + 48 = 105
  • str  - '0' 的十进制数 结果为:57 - 48  =  9

3. 根据ASCII表得出

  • str + '0' 的字符 结果为:十进制数 105 ----ASCII-------> i
  • str - '0' 的字符 结果为:十进制数  9  ------ASCII-------> \t (横向制表)

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第6张图片

所以也就得出了,在结果展示中,那个空得位置,是横向制表占用了。



总结:

  • 1. 在计算机中,所有的数据在存储和运算时都要使用二进制数表示,这些数据会根据我们需要的形式进行解释。ASCII码对照表就是这样的解释形式。
  • 2. 字符和字符相减或者相加的本质就是ASCII码的计算
  • 3. 用%d打印出来的结果是对应的ASCII码的十进制数,用%c打印出来的结果是对应的ASCII码的字符
  • 4. 在ASCI中I满足这样的规律:
  •       某个字符  x + ’ 0 ’ 就是指将 x 转变为字符型     char -> int
  •       某个字符  x - ’ 0 ’ 就是指将 x 转变为整形         int -> char

四、实战演练

习题1
 

将一个整数的各位数字按照逆序构成一个字符串

请输入:569877

请输出:"778965"

代码如下:

int main()
{
	//char a[10];
	int len = 0;
	int n;
	scanf("%d", &n);
	// 统计这个数是几位数 ,方便后面给字符串开辟动态数组
	int m = n;
	int cout = 0;
	while (n)
	{
		n = n / 10;
		len++;
	}
	printf("这个数是%d位数,给字符串开辟%d个内存\n", len, len+1);
	// 要给 '\0' 多开一个内存
	char* a = (char*)malloc((len+1) * sizeof(char));
	while (m)
	{
		a[cout] = m % 10 + '0';
		m = m / 10;
		cout++;
	}
	// 保证字符串最后一位是'\0'
	a[cout] = '\0';
	printf("%s\n", a);
	free(a);
	a = NULL;
	return 0;
}

效果展示:

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第7张图片



习题2
 

将字符串中的数字转换出来
 

代码如下:

int main()
{
	char a[] = "WGB 加油99999";
	int len = strlen(a);
	int m = 0;

	for (int i = 0; i < len ; i++)
	{
		if (a[i] >= '0' && a[i] <= '9')
		{
			m = m * 10 + a[i] - '0';
		}
	}
	printf("%d\n", m);
	return 0;
}

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)_第8张图片

五、共勉

 以下就是我对C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C语言字符串的进阶理解请持续关注我哦!!!!! 

你可能感兴趣的:(C语言超详细解析,c语言,c++,算法,开发语言,数据结构)