之前我们说了指针和数组指针,接下来我们来看看字符串指针,顾名思义,字符串指针指的是指向字符串的指针,这里又出现了一个问题,什么叫做字符串呢?字符串就是一连串有限字符串起来的字符,一个数字或一个字母都叫字符,把他们串起来,就成了字符串了,当然,我们的一个汉字也是一个字符。数字和字母这些字符占一个字节,我们用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 ow biancheng ai wo是不是感觉挺有意思的,一起来动手制作一下吧!