第一次尝试
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int reverse_string(char* arr) {
if (arr[0] == '\0') {
return 0;
}
else {
reverse_string(arr + 1);
printf("%c", arr[0]);
return 0;
}
}
int main() {
char arr[10] = "0";
printf("请输入字符串个数:\n");
int n = 0;
scanf("%d", &n);
printf("请输入字符串:\n");
/*for (int i = 0; i < n; i++) {
scanf("%c", &arr[i]);
}*/
scanf("%s", arr);
/*for (int i = 0; i < n; i++) {
printf("%c", arr[i]);
}*/
//printf("%s", arr);
//char arr[] = "yevoli";
reverse_string(arr);
return 0;
}
用户输入一串字符,最终打印输出逆序字符串,关键点在于字符串是以 ‘\0’ 结束,所以以这个为结束标志,使用递归就可得出结果。
第二次尝试
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int reverse_string(char* arr) {
if (strlen(arr)<2) {
return arr;
}
else {
char ch = *arr;
int len = strlen(arr) - 1;
*arr = *(arr + len);
*(arr + len) = '\0';
reverse_string(arr + 1);
//printf("%c", arr[0]);
*(arr+len) = ch;
return arr;
}
}
int main() {
char arr[4] = "0";
//printf("请输入字符串个数:\n");
//int n = 0;
//scanf("%d", &n);
printf("请输入字符串:\n");
/*for (int i = 0; i < n; i++) {
scanf("%c", &arr[i]);
}*/
scanf("%s", arr);
/*for (int i = 0; i < n; i++) {
printf("%c", arr[i]);
}*/
//printf("%s", arr);
//char arr[] = "yevoli";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
上面的做法只能满足逆序打印,并没有真正的逆置字符串,做了一些修改,在元素逆置的时候,使用标记法和指针的特性,让交换更加简单,不需添加太多没必要元素。