中文字符串逆序输出

      今天碰到这个题,让我逆序输出中文字符串,可给我烦死了,之前没有遇到过,也是查了资料才知道,让我太汗颜了。

     英文字符串逆序输出很容易,开辟一块空间用来存放逆序后的字符串,从后往前遍历原字符串,对现在这个字符串赋值即可,代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	char s[] = "hello";
	int len = strlen(s);
	char* str = (char*)malloc(sizeof(char) * len + 1);
	int j = 0;
	for (int i = len - 1; i >= 0; i--)
	{
		str[j++] = s[i];
	}
	str[j] = '\0';
	for (int i = 0; i < len; i++)
	{
		printf("%c", str[i]);
	}
	return 0;
}

     是不是很简单,那你可能就会说,中文字符串逆序输出有什么难的,把 hello改成你想逆序输出的不完了吗?我也是这样想的,结果大错特错!

     接下来我查了资料才发现了我之前不知道的知识点,我们知道在字符编码方面,ASCII码为标准符号、数字、英文等进行了保留,取值范围是0~127,还有一部分作为拓展ASCII码128~255,当我们采用非ASCII编码时(汉字编码),一般用拓展ASCII码来进行,约定用128~255范围的连续2个进行汉字编码,同时因为编码的问题汉字所占字节的第一位必须是1,这样转化成有符号数字之后是小于0的,转化成无符号数字就大于127,这就涉及到了编码的知识,有兴趣的自行了解,因此,在处理字符串时,如果是有符号字符串,遇到小于0的字符,会结合后面紧跟的字符来组成一个汉字,如果是无符号的,则判断是否大于127

     还有就是一个汉字占用两个字节,知道了以上的知识,才能写出正确的代码。

#include<stdio.h>
#include<string.h>
int main()
{
	char s[] = "你好张三";
	int len = strlen(s);
	char* p = s;
	for (int i = len - 1; i >= 0;)
	{
		if (p[i] < 0)//判断字符值是否小于0,这里默认char是signed char类型
		{
			for (int k = i - 1; k <= i; k++)
			{
				printf("%c", p[k]);//字符值小于0,则说明它和它前面一个表示一个汉字
			}
			i -= 2;//遍历跳过两个字节,一个汉字占两个字节
		}
	}
	return 0;
}

相关推荐

  1. PTA-字符串

    2023-12-15 20:56:03       38 阅读
  2. 字符串

    2023-12-15 20:56:03       38 阅读
  3. 练习-字符串统计

    2023-12-15 20:56:03       34 阅读
  4. 数组(以字符串为例)

    2023-12-15 20:56:03       32 阅读
  5. C 练习实例40-将一个数组输出

    2023-12-15 20:56:03       58 阅读
  6. C语言每日一题(1)字符串

    2023-12-15 20:56:03       58 阅读
  7. C语言——oj刷题——实现字符串

    2023-12-15 20:56:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-15 20:56:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-15 20:56:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-15 20:56:03       82 阅读
  4. Python语言-面向对象

    2023-12-15 20:56:03       91 阅读

热门阅读

  1. 关于【Error】expected ‘(‘ before ‘else‘

    2023-12-15 20:56:03       55 阅读
  2. switch case和if else对比

    2023-12-15 20:56:03       61 阅读
  3. LeetCode49. Group Anagrams

    2023-12-15 20:56:03       138 阅读
  4. 拒接服务攻击(DOS)的初步介绍

    2023-12-15 20:56:03       122 阅读
  5. 高并发场景下的httpClient使用优化技巧

    2023-12-15 20:56:03       54 阅读
  6. Go-MQTT使用

    2023-12-15 20:56:03       58 阅读
  7. Linux-----4、关机|重启

    2023-12-15 20:56:03       74 阅读