将一个数组逆序排列和数组逆序打印

数组逆序排列和数组逆序打印,虽然它们最后输出的结果是相同的,但是其过程确有着很大的区别。

1.区别

(1)逆序打印:就是在不改变原数组的基础上,将数组从后往前打印出来,注意数组中的值没有变化

(2)逆序排列:此时数组的内容发生了变化,比如一个字符数组"abcdefg”,逆序排列后就变成了"gfedcba"。

2.举例实现

这里我们就用字符数组abcdefg

(1)逆序打印

int main()
{
	int i = 0;
	char arr[] = "abcdefg";
	int sz = strlen(arr);
	for (i = sz - 1; i >= 0; i--)
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

结果显示为

从代码中我们可以很清楚的看到,数组中的值并没有改变。

(2)逆序排列

这里我们定义一个函数reverse_strlen(),将逆序排列的代码放在其里面

void reverse_string(char arr[])
{
	int left = 0;
	int right = strlen(arr) - 1;
	while (left < right)
	{
		char tmp = 0;
		tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}

代码实现为:

int main()
{
	int i = 0;
	char arr[] = "abcdefg";
	int sz = strlen(arr);
	reverse_string(arr);
	for (i = 0; i <= sz - 1; i++)
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

从代码中,我们可以看出,虽然两种过程结果显示一样,但是使用for循环打印时顺序是不一样的,这就说明了在逆序排列中原数组的值确实发生了改变,由此,我们就很好的说明了它们的区别。

3.其他

 在代码中,我们在求字符数组大小时不光可以使用strlen(),也可以用

int sz = sizeof(arr)/sizeof(arr[0]);

但是它们会有一点不同,就是以这种方式求出的大小会比使用strlen()的结果大1,原因在于我们对字符数组初始化时

char arr[] = "abcdefg";

虽然我们看到有7个字符,但其实在字符g后面还隐藏着一个\0,它也被初试化到了数组中。

而使用strlen()求字符串大小时,其结果是到字符串中第一个\0时字符的个数。例如

int main()
{
	char arr[] = "abcdefg";
	char arr1[] = "abc\0defg";
	int sz = strlen(arr);
	int sz1 = strlen(arr1);
	printf("%d\n", sz);
	printf("%d", sz1);
	return 0;
}

结果为:

 因此我们在使用

int sz = sizeof(arr)/sizeof(arr[0]);

 求出sz后,在for循环中,我们的i就要小于等于sz-2;

for(i = 0;i<=sz-2;i++)

以上就是我们需要注意的点。

当然了,如果不想使用库函数的时候,我们可以自己定义一个求字符数组大小的函数my_strlen()

int my_strlen(char arr[])
{
	int count = 0;
	int i = 0;
	while(arr[i] != '\0')
	{
		count++;
		i++;
	}
	return count;
}

这里函数的参数是char arr[],代表的是第一个数组元素的地址,其本质是一个指针变量,因此也可以写成char* arr;

以上就是简单说明的内容,如果有说的不对的地方欢迎指正。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值