/实现:将参数字符串中的字符反向排列,不是逆序打印。
//要求:不能使用C函数库中的字符串操作函数。
例如:“abcdefg”变成“gfedcba”
避免自己忘记 记录一下吧!
最简单的方法也是最容易想到的:
就是使用数组的思想就可以了
#include<stdio.h>
#include<string.h>
int main() {
char arr[] = "abcefg";
int sz = strlen(arr);
printf("%d\n", sz);
int left = 0;
int right = sz-1;
while (left <= right) {
char tam = arr[left];
arr[left] = arr[right];
arr[right] = tam;
left++;
right--;
}
printf("%s\n", arr);
return 0;
}
利用指针解答
在这之前记录一个函数 该函数是根据地址直接可以求出字符串的长度
int my_strlen(char* s) {
int count = 0;
while (*s != '\0') {
count++;
s++;
}
return count;
}
#include<stdio.h>
int my_strlen(char* s) {
int count = 0;
while (*s != '\0') {
count++;
s++;
}
return count;
}
void Reverse(char* s, int sz) {
char* left = s;
char* right = s+sz - 1;
while (left <= right) {
char tam = *left;
*left = *right;
*right = tam;
left++;
right--;
}
}
int main() {
char arr[] = "abcdef";
int sz = my_strlen(arr);
Reverse(arr, sz);
printf("%s\n",arr);
return 0;
}
3.递归
思路:假设有“abcdefg” 本着大化小的原则,那么化成a“bcdef”g==a b “cde”f g
这样以此类推
void Reverse(char* s)
{
int len = my_strlen(s);
char tam = *s;//abcdef
*s = *(s + len - 1);
*(s + len - 1) = '\0';//这边一定是先等于'\0'不然不能下面的条件无法成立 会变成死递归
if ((my_strlen(s + 1)) > 1) {
Reverse(s+1);
}
*(s + len - 1) = tam;
}
int main() {
char arr[] = "abcdef";
int sz = my_strlen(arr);
Reverse(arr);
printf("%s\n",arr);
return 0;
}