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

来源:互联网 发布:平面图用什么软件画 编辑:程序博客网 时间:2024/04/29 11:30

  第一次看到这个问题,确实有点懵:动态地?字符移动?……不过,尝试着在纸上画一画,还是能想来题目的意思。
  实现思路:
  多个字符可以组成一个字符串(定义为字符数组),再定义一个新的字符数组(两个数组大小相同)。因为要求是“字符从两端移动”,所以,需要两个整型变量(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循环再实现一下,对比看有什么区别。

阅读全文
0 1
原创粉丝点击