打印一串字符串如果能加上一些酷炫的效果,那会很有意思。今天我们用C语言实现多个字符从两端移动,向中间汇聚。
首先写出起始和最终的效果,用两个字符数组存储两个字符串
char arr1[] = "Hello World!!!!!";//hhh最先想到的就是这玩意,真是深入DNA
char arr2[] = "################";
接着写出左下标和右下标。左下标为0,右下标可以用两种方式来计算。万能的方法是用sizeof。
//左下标
int left = 0;
//右下标
int sz = sizeof(arr1) / sizeof(arr1[0]);//数组的元素个数(包括'\0')
int right = sz - 2;//先减去隐藏的'\0',再减去1(下标从0开始)
由于是字符数组,可以用strlen
//右下标
int right = strlen(arr1) - 1;//长度不包括'/0',所以减去1即可
我们把arr2打印出来,然后把arr1的最左边字符和最右边字符拿到arr2里,接着让left和right向中间靠拢,往复形成循环。当left比right小时说明还有字符可以拿。
while (left <= right)
{
printf("%s\n", arr2);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
}
打印完后可以先睡眠1秒然后清屏,效果就更好了。
while (left <= right)
{
printf("%s\n", arr2);
Sleep(1000);//睡眠1000毫秒,即1秒,头文件<windows.h>
system("cls");//system调用系统指令,cls为清屏,头文件<stdlib.h>
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
}
由于最后清屏了,最好再打印一遍arr1
printf("%s\n", arr1);
完整代码如下
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
//编写代码,演示多个字符从两端移动,向中间汇聚
int main()
{
char arr1[] = "Hello World!!!!!";//hhh最先想到的就是这玩意,真是深入DNA
char arr2[] = "################";
//左下标
int left = 0;
//右下标
//int sz = sizeof(arr1) / sizeof(arr1[0]);
//int right = sz - 2;//先减去隐藏的'\0',再减去1(下标从0开始)
int right = strlen(arr1) - 1;//长度不包括'/0',所以减去1即可
while (left <= right)
{
printf("%s\n", arr2);
Sleep(1000);//睡眠1000毫秒,即1秒,头文件<windows.h>
system("cls");//system调用系统指令,cls为清屏,头文件<stdlib.h>
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
}
printf("%s\n", arr1);
return 0;
}