0
点赞
收藏
分享

微信扫一扫

不使用中间变量实现字符串反转


  昨天做了一道面试题,题目大概是这样的:现在有字符串“I love China”,需要对该字符串中的单词进行逆序,但是不允许使用第三方变量来保存数据,可以使用辅助指针。
  思路是比较清晰的,但在纸上手写代码还有感觉有点别扭,编译不了啊。。。所以今天有空就画个流程图,再码一下代码,编译调试一下吧。
  思路是这样的:利用两个指针 *head 和 *tail 分别指向字符串的头和尾(不是 ‘\0’),然后交换指针所指向的数据(通过加减运算),接着使 head 和 tail 指针往中间移动,直到所有字符交换完。
  
流程图:


不使用中间变量实现字符串反转_流程图

代码:

#include <stdio.h>
#include <string.h>

int main(void)
{
char testStr[] = "I love China";

int len = strlen(testStr);

char *head = testStr;
char *tail = &testStr[len -1];

printf("%s\n", testStr); //before

while(head != tail && head < tail)
{
*head = *head + *tail;
*tail = *head - *tail;
*head = *head - *tail;
head++;
tail--;
printf("%s\n", testStr); //reversing
}

printf("%s\n", testStr); //after

return 0;
}

  需要注意的是,在这里字符串定义为字符数组变量,即:

char testStr[] = "I love China";

  如果定义成:

char *testStr = "I love China";

  则表示 testStr 指针指向一个字符串常量,这时候如果通过 head 和 tail 指针去操作该常量,就会出现“Segmentation fault (core dumped)”。
  
  好啦,我们来看一下打印结果吧,如下:


不使用中间变量实现字符串反转_流程图_02


举报

相关推荐

0 条评论