关于C语言通过指针和数组实现字符串倒序的一篇文章,希望对大家有所帮助。
1.数组方式实现 (不用字符串函数)程序如下
void ReverseByArray(char * s){ int len = 0; while (s[len] != '') len++; int t; for (int i = 0; i < len / 2; i++) { t = s[i]; s[i] = s[len - i - 1]; s[len - i - 1] = t; }}
与数组有关的操作,必须要用到字符串长度len (因为取长度比较简单,就不用字符串函数了)
在3-5行 首先用检测 '' 字符判断取字符串长度 用len变量记录
我尝试过下面这一种代码 测到的字符串长度比原来大1
int len = 0;while (s[len++] != '') ; //空语句
就不使用上面这种方法
然后是倒序的具体实现,
常见的好几种方法,网上好多是malloc出来len+1大小的空间 然后逆序放进去
但是我觉得,既然是数组实现,就用一个临时变量t用前后交换的方法 直接完成交换(循环只是循环len/2)
另外一个容易出现问题的是 交换的时候s[len - i - 1] ,为什么要多减1呢?
2.用指针的方法 字符串倒序
void ReverseByPointer(char * s){ char buf[100]; char *b = buf; char *p = s; while (*p != '') *(b++) = *(p++); while(*s != '') *(s++) = *(--b);}
用指针 就要突出指针的特点 就不像数组
第一眼看上去,程序似乎特别简单.
但是 这个程序用到了缓冲区,
如果这个缓冲区大小不够 ↓如下
在缓冲区足够的情况下 ,程序就会正常运行辣
这里新建的两个指针变量b和p都不是多余 起个别名用 都有实在的作用
buf是数组名 值虽然是数组的首地址,但是这个首地址不能进行加减操作,所以新建了个b指针 指向buf
s 是 char * 类型的 可以加减 但是 加到最后(找到后) 怎么倒回来呢?
那么 我就选择 定义一个p指针变量 并赋值为 指针s 就是 s和p是一样的
而且 p向后移动 找到''后 它的任务就完成了 并不需要回到开始的位置
最后 把buf的内容 -- (倒着)填回 s 指向的字符串就行了
最后就是的问题 因为字符串只是倒序 长度没有变化,所以用的还是s原来的 不用在末尾添加
3.完整的程序和运行结果
#include <stdio.h>
void ReverseByArray(char * s){ int len = 0; while (s[len] != '') len++; int t; for (int i = 0; i < len / 2; i++) { t = s[i]; s[i] = s[len - i - 1]; s[len - i - 1] = t; }}
void ReverseByPointer(char * s){ char buf[100]; char *b = buf; char *p = s; while (*p != '') *(b++) = *(p++); while(*s != '') *(s++) = *(--b);}
int main(){ char s[20] = "I Love you 233"; printf("源字符串:%s \n", s);
ReverseByArray(s); printf("数组方式倒序:%s \n", s);
ReverseByPointer(s); printf("指针方式倒序:%s \n", s);}
/* 在VC编译器的运行结果源字符串:I Love you 233数组方式倒序:332 uoy evoL I指针方式倒序:I Love you 233请按任意键继续. . .*/
本文永久更新链接地址:http://www.xuebuyuan.com/Linux/2017-01/139848.htm
以上就上有关C语言通过指针和数组实现字符串倒序的相关介绍,要了解更多C语言指针,C语言数组,字符串倒序实现,C语言通过指针和数组实现字符串倒序,编程,Linux编程,Linux Shell,Android,Android教程,JAVA,C语言,Python,HTML5内容请登录学步园。