请实现字符串从两边逐渐聚拢

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[]="Welcome to the 6088!!!!";
	char arr2[]="#######################";
	int left=0;
	int right=sizeof(arr1)/sizeof(arr1[0])-2;
//	int left=strlen(arr1)-1;
	while(left<=right)
	{
		arr2[left]=arr1[left];
		arr2[right]=arr1[right];
		printf("%s\n",arr2);
		left++;
		right--;
	}
	return 0;
}

C语言对'\0'结束的相关处理:

1、字符数组的初始化,如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。例如:char a[9]={'1','2','3','4','5','6','7','8'};中,初始化数值只提供了8个,但字符长度为9,因此,会自动在补充空字符(即'\0')。

2、字符串常量初始化数组。

例如:char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m'};可写为:char c[ ]={"C program"} 或去掉{}写为:char c[ ]="C program";注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。

在计算数组长度时我已知以下方法

1.使用sz=sizeof(arr)/sizeof(arr[0])

2.使用函数strlen()   (#include<string.h>)

注意使用1方法会将字符串最后的'\0’一同计算

但2方法不会!!!!!

最后用2方法吧!!!

然后我也学会了字符串还能这样输入

当然这个程序还能更好!

如我们可以使它延时输出

#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
	char arr1[]="Welcome to the 6088!!!!";
	char arr2[]="#######################";
	int left=0;
	int right=sizeof(arr1)/sizeof(arr1[0])-2;
//	int left=strlen(arr1)-1;
	while(left<=right)
	{
		arr2[left]=arr1[left];
		arr2[right]=arr1[right];
		printf("%s\n",arr2);
		Sleep(1000);
		left++;
		right--;
	}
	return 0;
}

这里值得注意的是Sleep()的参数单位是毫秒!!!!

还可以更好!

#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
	char arr1[]="Welcome to the 6088!!!!";
	char arr2[]="#######################";
	int left=0;
	int right=sizeof(arr1)/sizeof(arr1[0])-2;
//	int left=strlen(arr1)-1;
	while(left<=right)
	{
		arr2[left]=arr1[left];
		arr2[right]=arr1[right];
		printf("%s\n",arr2);
		Sleep(1000);
		system("cls");	
//		其中cls是执行系统命令的一个函数 是清空屏幕的意思 
		left++;
		right--;
	}
		printf("%s\n",arr2);
	return 0;
}

上一篇:第六章 数组、排序查找


下一篇:Matlab n阶矩阵行、列互换