简单LinuxC程序关于逆序一个中英混合字符串
来源:互联网 发布:mac怎么压缩rar 编辑:程序博客网 时间:2024/05/23 13:28
题目:逆序一个中英混合字符串,此字符串包含字母字符、数字字符、空格字符、标点符号等英文字符以及中文字符,要求从键盘输入
源代码如下:
#include <stdio.h>#define MAX 100 //定义字符串的最大长度int main(){char ch[MAX];int len = 0;fgets(ch,MAX,stdin); //使用fgets从键盘获取一个字符串while (ch[len]){len++;}ch[--len] = '\0'; //得到字符串长度,并去掉回车符int min = 0;int max = len - 1;int temp;while (min < max) //字符串逆序(按字节长度){temp = ch[min];ch[min++] = ch[max];ch[max--] = temp;}int i = len;while (i != 0) //从后开始扫描,遇到小于0的字符,则逆序自其往前三字符(UTF-8编码下中文字符占3个字节长度){i--;if (ch[i] < 0){temp = ch[i];ch[i] = ch[i - 2];ch[i - 2] = temp;i = i - 2;}}printf ("%s\n",ch); //输出逆序后的字符 return 0;}
本题中涉及几个知识点,首先是fgets()函数,这个我在之前的博客中提到过,想了解的可以去看看,反正很有用。第二个就是计算字符串长度,虽然有专门计算字符串长度的函数,但了解如何计算对我们的字符串学习很有帮助,原理就是从左向右扫描,扫描到空字符停止。接下来是字符串逆序,这个需要用到字符串长度,可以借用中间变量进行字符的交换,字符串的使用和数组类似。由于在UTF-8编码下,中文字符占3个字节长度,且首个字节保存的值是小于0的,而英文字符的值都大于0,所以我们可以从后往前扫描,碰到值小于0的,交换自其往前三个字符,其实只要交换一遍,就可以将中文字符的三个字节再次逆序回来,就可以正常输出中文字符了。
此题类似于逆序一句英文语句,但不改变单词结构,需要逆序两次。虽然比较繁琐,但只要掌握基本原理,还是不难的。需要注意的是中文字符在内存中的存储方式。此程序也可逆序纯英文或纯中文的字符串。分享这个方法给大家,希望和大家一起交流。
阅读全文
1 0
- 简单LinuxC程序关于逆序一个中英混合字符串
- 简单LinuxC程序关于倒置句子中的单词位置(字符串逆序应用)
- 简单LinuxC程序关于实现识别字符串中合法的帧(字符串输入)
- 简单LinuxC程序关于报数问题
- 简单LinuxC程序关于任意长整数相加(字符串实现)
- 简单LinuxC程序关于实现进制转换
- 简单LinuxC程序关于进制转换(递归函数)
- 将一个字符串逆序存放的程序
- 简单LinuxC程序关于简单计算器(函数指针与回调函数)
- 一个简单的关于字符串识别与转换的程序
- 程序题:输入数字,输出字符串。 如何逆序一个字符串!
- 关于字符串长度、字符串逆序的相关程序
- 简单LinuxC程序关于排序问题(冒泡排序与选择排序)
- 简单LinuxC程序关于倒置句子中的单词位置(指针的使用)
- 简单LinuxC程序关于加密(将任意长字符转换为定长整数)
- 简单LinuxC程序关于加密(将任意长字符转换为定长整数)
- linuxC程序中获取shell脚本输出
- linuxC程序中获取shell脚本输出
- 批量前移list中指定的元素
- 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?
- 二进制中1的个数
- 基于eclipse的android开发环境配置
- C51中断函数格式
- 简单LinuxC程序关于逆序一个中英混合字符串
- 2017.7.14 流水帐系列
- 【LectCode】513. Find Bottom Left Tree Value
- 函数实现两个数的和,不能用+等算术运算符
- 文件删除原理
- mysql定时备份所需权限、shell脚本、OSS备份
- 算法<递归与非递归方式翻转单链表>
- socket的connecttimeout不起作用
- bzoj 3308: 九月的咖啡店(最大费用最大流)