自搭建网站百度竞价代运营公司
非递归
非递归的思路比较巧妙,如下图:
我们把第一个和倒数第一个交换,把第二个和倒数第二个交换,把第三个和倒数第三个交换…
你可能会问:“如果我字符串的字符数是奇数怎么办?”
回答是,中间那个字符和他自己交换,没啥影响,他还是他那个位置。
void reverse_string(char* str)
{int len = strlen(str);char* left=str;char* right = str + len - 1;while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}
int main()
{char arr[20] = { 0 };printf("请输入你想逆序的字符串:");scanf("%s", arr);reverse_string(arr);printf("%s", arr);return 0;
}
递归
递归的思路很简单,就是一层一层往下“递”,直到字符串变成只有一个字符,然后打印那个字符
随后就是一层一层往上“归”,打印指针锁定的那个字符即可
void reverse_string(char* str)
{if (*str != '\0'){reverse_string(str + 1);}printf("%c", *str);
}
int main()
{char arr[20] = { 0 };printf("请输入你想逆序的字符串:");scanf("%s", arr);reverse_string(arr);return 0;
}