字符串指针及句子逆序

来源:互联网 发布:mac最好的视频播放器 编辑:程序博客网 时间:2024/06/06 10:46

之前我们说了指针和数组指针,接下来我们来看看字符串指针,顾名思义,字符串指针指的是指向字符串的指针,这里又出现了一个问题,什么叫做字符串呢?字符串就是一连串有限字符串起来的字符,一个数字或一个字母都叫字符,把他们串起来,就成了字符串了,当然,我们的一个汉字也是一个字符。数字和字母这些字符占一个字节,我们用char这个类型来定义它们。同时讲到字符串,经常会遇到要求字符串长度的问题。前人大牛们为我们写了这样一个函数strlen(),他可以帮助我们求出字符串的长度,在使用这个函数时,要记住加上它的头文件#include <string.h>,缺少这个头文件,计算机可不认你账啊。

接下来,我们来做一道有意思的字符串指针的问题,如何将wo ai biancheng”这一整句话逆序过来,变成“biancheng ai wo

首先,我们要解决的问题有哪些,如果需要逆序的话,很容易根据首尾交换可以将整句话逆序过来,但是,在每一个空格后的每个字符串有需要进行逆序,这就需要我们进行二次逆序了。所以,在这里,我们所要解决的问题就是二次逆序。

我们可以先将整个句子逆序过来,然后,再以空格为一个标记点,再将每个空格里的一段字符串逆序。

来动手试一下

#include <stdio.h>#include <string.h>int main(){char str[] = "wo ai biancheng";// 将整个字符串逆序char *p1 = str;char *p2 = str + strlen(str) - 1;          char *p3 = NULL;                     // 用于将单词逆序char tmp;while (p1 < p2)             // 首先将整个句子进行逆序{tmp = *p1;*(p1++) = *p2;*(p2--) = tmp;}puts(str);                       // 打印字符串// 再将每一个单词进行逆序,单词通过空格去找p1 = str;p2 = str;while(*p2)                 // p2找到字符串结束为止{if (*p2 == ' ')           // 找到一个空格,要将前面的单词进行逆序{p3 = p2 - 1;            // p3用来指示空格前字符串的最后一个元素下标while (p1 < p3)        {tmp = *p1;*(p1++) = *p3;*(p3--) = tmp;}p1 = p2 + 1;}p2++;}   // 通常我们以为写完上面的步骤就可以完成逆序了,但是殊不知在寻找空格的p2在最后一个字符串的时候,扫描到的是\0 会使得最后一段字符串还未来的及逆序程序就结束了,所以要加上下面的交换将最后一段的字符串逆序过来。p3 = p2 - 1;while (p1 < p3){tmp = *p1;*(p1++) = *p3;*(p3--) = tmp;}puts(str);return 0;}
最终的结果显示:gnehcnaib ia owbiancheng ai wo
是不是感觉挺有意思的,一起来动手制作一下吧!

原创粉丝点击