输入一个字符串,将其逆转并输出。eg:s=“abcd”,逆序后变成s=“dcba”。
1.原地逆序
原地逆序不允许额外分配空间,就是将字符串两边的字符逐个交换。
(1)设置两个指针,分别指向字符串的头部和尾部,然后交换两个指针所指的字符,并向中间移动,直到交叉。(这个方法最普遍)
1 #include <stdio.h> 2 3 char * reverse_str(char *str) 4 { 5 char *p,*q; 6 p=str; 7 q=str; 8 while(*q) 9 q++; 10 q--; 11 while(p<=q) 12 { 13 char a=*p; 14 *p++=*q; 15 *q--=a; 16 17 } 18 return str; 19 } 20 21 int main() 22 { 23 // char string[]="abcdefg"; 24 char string[128]; 25 scanf("%s",string); 26 printf("now: %s\n",reverse_str(string)); 27 return 0; 28 }
(2)递归,调用方法 reverse_str(str,0,strlen(str)-1),对字符串 str 在区间 left 和 right 之间进行逆序。
1 char *reverse_str(char *str,int left,int right) 2 { 3 4 if(left>=right) 5 return str; 6 7 char t=str[left]; 8 str[left]=str[right]; 9 str[right]=t; 10 return reverse_str(str,left+1,right-1); 11 12 }