非递归
非递归的思路比较巧妙,如下图:
我们把第一个和倒数第一个交换,把第二个和倒数第二个交换,把第三个和倒数第三个交换…
你可能会问:“如果我字符串的字符数是奇数怎么办?”
回答是,中间那个字符和他自己交换,没啥影响,他还是他那个位置。
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 != ' ')
{
reverse_string(str + 1);
}
printf("%c", *str);
}
int main()
{
char arr[20] = { 0 };
printf("请输入你想逆序的字符串:");
scanf("%s", arr);
reverse_string(arr);
return 0;
}



