C语言:翻转字符串数组的两种方法

第一种指针类型:

#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次),每次交换是前后交换。

发布了28 篇原创文章 · 获赞 7 · 访问量 1188

猜你喜欢

转载自blog.csdn.net/haduwi/article/details/105108288