第一种指针类型:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char rec(char*arr) {
int len = strlen(arr);//11
//字符串首地址
char* p = arr;
//字符串最后一个有效字符的地址
char* p1 =&arr[len-1];//下标要减一
while (p<p1)
{
char temp = *p;
*p = *p1;
*p1 = temp;
p++;
p1--;
}
}
int main(void){
char arr[] = "hello world";
rec(arr);
printf("%s\n", arr);
system("pause");
return EXIT_SUCCESS;
}
第二种数组类型:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char rec(char*arr) {
int len = strlen(arr);//11
for (int i=0;i<len/2;i++)
{
char temp;
temp = arr[i];
arr[i] = arr[len -i-1];
arr[len - i - 1] = temp;
}
}
int main(void){
char arr[] = "hello world";
rec(arr);
printf("%s\n", arr);
system("pause");
return EXIT_SUCCESS;
}
注意:
数组类型不能这样写:
char rec(char*arr) {
int len = strlen(arr);//11
for (int i=0;i<len;i++)
{
arr[i]=arr[len-i-1];//这是错误写法!
}
}
结果只翻转了一半,
问题分析:
任何一个数组,交换的次数都是长度的一半(奇数比如11,交换次数为5次),每次交换是前后交换。