C语言实战:字符串动态展开效果

发布于:2025-08-03 ⋅ 阅读:(14) ⋅ 点赞:(0)

多个字符从两端移动,向中间汇聚

在开始操作之前,我们先讲解一下其中涉及到的知识点

一. strlen函数

在C语言中, strlen 是一个标准库函数,用于计算字符串的有效长度,即字符串中字符的个数,不包括结尾的空字符'\0'(区分:sizeof 运算符,求的是字节数,可用于计算数组元素个数)

1. 需要包含标准库头文件 <string.h> 

2. 字符串必须以 '\0' 结尾

3. 返回值的类型是size_t(无符号类型)

举个例子:

#include <stdio.h>
#include <string.h>

int main()
{
    char arr[] = { 'b', 'i', 't' };
    printf("%d\n", strlen(arr));

    return 0;
}

上述代码在定义数组arr时,不包含 ’\0‘ ,因此调用 strlen 会返回随机值而不是3

正确代码:

#include <stdio.h>
#include <string.h>

int main()
{
    char arr[] = { 'b', 'i', 't','\0'};
    printf("%d\n", strlen(arr));

    return 0;
}
//运行结果:
//3

二. Sleep函数

1. 它不是C语言标准库函数,而是Windows API提供的特定函数

2. 在C语言中,Sleep函数用于让程序暂停执行指定时间,单位是毫秒,如:Sleep(1000)表示暂停1秒

3. Windows系统:需要包含<windows.h>


三. system("cls")

在C/C++中,system("cls") 是一个用于清空控制台(命令行窗口)屏幕的指令

功能:调用操作系统的命令cls,执行后会清除当前控制台窗口已输出的所有内容,并将光标移动到左上角

依赖:cls 是 Windows 的指令,仅在 Windows 下有效;且需要包含头文件<stdlib.h>

风险:不建议频繁调用,可能会影响程序性能;可能存在命令注入风险


四. 设计思路


五. 代码及效果

5.1 初始代码

#include <stdio.h>
#include <string.h>

int main()
{
	//初始化两个字符数组
	char arr1[] = "welcome to here";
	char arr2[] = "***************";
	//定义数组左右下标
	int left = 0;
	int right = strlen(arr1) - 1;

	//逐次将arr1赋值给arr2
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		left++;
		right--;
	}

	return 0;
}

效果:迅速把下面的内容显示在屏幕上

5.2 改进一:调整内容输出速度

#include <stdio.h>
#include <string.h>
#include <windows.h>

int main()
{
	char arr1[] = "welcome to here";
	char arr2[] = "***************";
	int left = 0;
	int right = strlen(arr1) - 1;

	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(500);//改进处:每次输出间隔0.5秒
		left++;
		right--;
	}

	return 0;
}

5.3 改进二:添加清屏,更加动态化

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>

int main()
{
	char arr1[] = "welcome to here";
	char arr2[] = "***************";
	int left = 0;
	int right = strlen(arr1) - 1;

	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(500);
		system("cls");//改进处:加入清屏效果
		left++;
		right--;
	}
	printf("%s\n", arr2);//将最后的结果显示在屏幕上

	return 0;
}

动态化的最终效果大家可以在电脑上尝试一下

5.4 最终代码

如上


结语

这就是编程的乐趣所在,需要我们不断的动手实践,浅浅的期待一下下一个效果吧~


网站公告

今日签到

点亮在社区的每一天
去签到