设为首页 加入收藏

TOP

C语言通过指针和数组实现字符串倒序
2017-01-24 08:15:32 】 浏览:4368
Tags:语言 通过 指针 实现 字符串 倒序

关于C语言通过指针和数组实现字符串倒序的一篇文章,希望对大家有所帮助。


1.数组方式实现? (不用字符串函数)程序如下


void ReverseByArray(char * s)
{
? ? int len = 0;
? ? while (s[len] != '\0')
? ? ? ? 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行 首先用检测 '\0' 字符判断取字符串长度 用len变量记录


我尝试过下面这一种代码 测到的字符串长度比原来大1


int len = 0;
while (s[len++] != '\0')
  ; //空语句


就不使用上面这种方法


然后是倒序的具体实现,


常见的好几种方法,网上好多是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 != '\0')
? ? ? ? *(b++) = *(p++);
? ? while(*s != '\0')
? ? ? ? *(s++) = *(--b);
}


用指针 就要突出指针的特点 就不像数组


第一眼看上去,程序似乎特别简单.


但是 这个程序用到了缓冲区,


如果这个缓冲区大小不够? ↓如下



在缓冲区足够的情况下 ,程序就会正常运行辣


这里新建的两个指针变量b和p都不是多余 起个别名用 都有实在的作用


buf是数组名 值虽然是数组的首地址,但是这个首地址不能进行加减操作,所以新建了个b指针 指向buf


s 是 char * 类型的 可以加减 但是 加到最后(找到\0后) 怎么倒回来呢?


那么? 我就选择 定义一个p指针变量 并赋值为 指针s? 就是 s和p是一样的


而且 p向后移动 找到'\0'后 它的任务就完成了? 并不需要回到开始的位置


最后 把buf的内容 -- (倒着)填回 s 指向的字符串就行了


最后就是\0的问题? 因为字符串只是倒序 长度没有变化,所以\0用的还是s原来的\0 不用在末尾添加\0


3.完整的程序和运行结果


#include


void ReverseByArray(char * s)
{
? ? int len = 0;
? ? while (s[len] != '\0')
? ? ? ? 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 != '\0')
? ? ? ? *(b++) = *(p++);
? ? while(*s != '\0')
? ? ? ? *(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
请按任意键继续. . .
*/


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring MVC 3.1 之后如何配置mess.. 下一篇Spring MVC 中自动加载 JSON 转换..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目