【C语言】动态地演示多个字符从两端移动,向中间汇聚

  第一次看到这个问题,确实有点懵:动态地?字符移动?……不过,尝试着在纸上画一画,还是能想来题目的意思。
  实现思路:
  多个字符可以组成一个字符串(定义为字符数组),再定义一个新的字符数组(两个数组大小相同)。因为要求是“字符从两端移动”,所以,需要两个整型变量(left和right)作为数组下标以便同时分别访问数组中的前面的和后面的字符,访问到以后将二者内容分别拷贝到第二个数组中相应的空间(赋值),然后将left和right的值作以调整,因为“向中间汇聚”,所以left增大,right减小,继续访问数组1中剩余的字符并拷贝……访问和拷贝的过程需要用循环来实现,while循环和for循环都行。
  图解:
  这里写图片描述
  这里写图片描述
  这里写图片描述
  程序代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
int main()
{
    char arr1[] = "Nice to meet you!";
    char arr2[] = "*****************";//数组1和数组2大小相同
    int left = 0;
    int right = strlen(arr1) - 1;//求出任意一个数组的大小(不包含'\0')
    printf("%s\n", arr2);
    while (left <= right)
    {
        Sleep(1000);
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        left++;//左边的字符向右移动
        right--;//右边的字符向左移动
        printf("%s\n", arr2);//每移动一对字符,打印一次
    }
    system("pause");
    return 0;
}

  输出结果:
  这里写图片描述
  注意:
  ⑴“动态地”,就是要在屏幕上输出每一步拷贝后的第二个字符数组的内容,为了达到“动态”效果,我们需要用到一个函数:Sleep(),这是一个休眠函数,它的参数是需要休眠的时间,单位是毫秒。如:Sleep(1000),就是休眠1秒钟。这样,就可以每输出一次数组2,休眠1秒,然后继续输出。函数名中的“S”要大写,Sleep()包含在头文件Windows.h中。
  ⑵一个字符串总是以‘\0’结束,在访问、拷贝和输出时只需对有效字符进行操作。
  ⑶访问、拷贝和输出是一个循环的过程,循环执行的条件就是left<=right,临界点即为left=right,此时arr1[left]和arr2[right]是同一个字符,此时还应该将此字符进行拷贝,所以不能写成left < right,否则会漏掉一个字符。当left>right时,循环结束。
  我这里用的是while循环,大家可以尝试用for循环再实现一下,对比看有什么区别。

猜你喜欢

转载自blog.csdn.net/Sunshine_R9H15Chen/article/details/78463122