给定一个含有n个元素的字符串,实现逆序。
这是个很基础的问题,实现方式也是很常见的c语言思路。虽然简单,但是仍然记录下来。
[期望]
比如char str[] = "abcdefg";
逆序后为:"gfedcba";
[思路]
分别从字符串的头和尾部向中间进发,依次交换头尾的值,直到在中间相遇。
代码:
#include <stdio.h> #include <string.h> void print_str(char *str) { int i,len; if (str == NULL) { return; } len = strlen(str); for(i=0; i<len; i++) { printf("%c",str[i]); } printf("\n"); } void str_reverse(char *str, int left, int right) { char tmp; while(left < right) { tmp = str[left]; str[left++] = str[right]; str[right--] = tmp; } } void str_reverse_test() { char str[] = "abcdefg"; str_reverse_1(str, 0, strlen(str)-1); print_str(str); } void main() { str_reverse_test(); }
至于函数原型为什么不定义成void str_rev(char *str);或者void str_rev(char *str, int
len);,
而是定义成void str_rev(char *str, int left, int right);
后面的文章会解释,也会用到它。