织梦网站档目管理空白,网站建立快捷方式,商城网站建设包括哪些,权威的手机网站制作今天碰到这个题#xff0c;让我逆序输出中文字符串#xff0c;可给我烦死了#xff0c;之前没有遇到过#xff0c;也是查了资料才知道#xff0c;让我太汗颜了。 英文字符串逆序输出很容易#xff0c;开辟一块空间用来存放逆序后的字符串#xff0c;从后往前遍历原字符串… 今天碰到这个题让我逆序输出中文字符串可给我烦死了之前没有遇到过也是查了资料才知道让我太汗颜了。 英文字符串逆序输出很容易开辟一块空间用来存放逆序后的字符串从后往前遍历原字符串对现在这个字符串赋值即可代码如下
#includestdio.h
#includestring.h
#includestdlib.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 还有就是一个汉字占用两个字节知道了以上的知识才能写出正确的代码。
#includestdio.h
#includestring.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;
}