首页
社区
课程
招聘
[原创]C语言文件利用读写操作,寻找输入文件中的两个最短字符串
发表于: 2018-10-14 13:37 6155

[原创]C语言文件利用读写操作,寻找输入文件中的两个最短字符串

2018-10-14 13:37
6155

今天给大家分享一下如何在C语言中,利用文件读写操作,寻找出自己输入文件中的两个最短字符串的方法!!!


根据题目分析,我们可以知道,题目是要求我们利用C语言,先创建一个文件,然后在控制台,也就是程序运行后弹出的黑框,在里面写东西,而且没规定写多少,写的内容会被写入我们创建的文件中,写完之后,让程序自动帮我们查找输入的最短的两个字符串,最后输出。




二、三步或许表述不太清楚、不详细,可参考本部分内容。
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STRING_LENGTH 1000

int main(int argc, char *argv[])
{
	// 定义文件输入输出指针
	FILE *inputFile, *outputFile;

	// 定义文件名
	char fileName[] = "myFile.txt";
	// 申请或两个用于存储最短字符串的字符串数组
	char min1[STRING_LENGTH] = "", min2[STRING_LENGTH] = "";
	// 申请或定义一个临时字符串数组
	char temp[STRING_LENGTH] = "";
	// 申请或定义一个临时字符串数组,长度为1
	char ch[1];

	// 创建或打开文件
	inputFile = fopen(fileName, "w");
	if (!inputFile)
	{
		printf("Failed to create/open file\n");
		exit(0);
	}

	printf("Please enter your strings!\n");
	// 控制台输入文字,EOF,即Ctrl+Z结束输入
	while ((ch[0]=getchar()) != EOF)
	{
		// 将控制台输入内容写入文件
		fprintf(inputFile, "%c", ch[0]);
	}
	//关闭文件
	fclose(inputFile);

	printf("\nStrings of you input:\n");
	// 以只读方式打开文件
	outputFile = fopen(fileName, "r");
	if (!outputFile)
	{
		printf("Failed to open file\n");
		exit(0);
	}

	// 逐行读取文件中的字符串,字符串最大程度为STRING_LENGTH,读取结束则退出
	while (fgets(temp, STRING_LENGTH,outputFile) != NULL)
	{
		// 每行字符串的长度
		int len = strlen(temp);
		// 将最后一个字符,即换行符改为'\0'
		temp[len - 1] = '\0';
		// 输出读取的内容
		printf("%s\n", temp);
		if (strlen(min1) == 0)
		{
			// 若min1还未赋值,则对min1赋值
			strcpy(min1, temp);
		}
		else if (strlen(min2) == 0)
		{
			// 若min1还未赋值,则对min2赋值
			strcpy(min2, temp);
		}
		else
		{
			// find min strings
			if (strlen(temp) < strlen(min1))
			{
				strcpy(min1, temp);
			}
			else if (strlen(temp) < strlen(min2))
			{
				strcpy(min2, temp);
			}
		}

		if (strlen(min1) > strlen(min2))
		{
			// 将min1和min2中,最短的字符串放在min1,次短min2
			strcpy(temp, min1);
			strcpy(min1, min2);
			strcpy(min2, temp);
		}

		// temp置空
		*temp = NULL;
	}
	fclose(outputFile);

	printf("\nShortest string:\n");
	printf("string1:%s\n", min1);
	printf("string2:%s\n", min2);

	system("pause");
	return 0;
}

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

#define STRING_LENGTH 1000

int main(int argc, char *argv[])
{
	// 定义文件输入输出指针
	FILE *inputFile, *outputFile;

	// 定义文件名
	char fileName[] = "myFile.txt";
	// 申请或两个用于存储最短字符串的字符串数组
	char min1[STRING_LENGTH] = "", min2[STRING_LENGTH] = "";
	// 申请或定义一个临时字符串数组
	char temp[STRING_LENGTH] = "";
	// 申请或定义一个临时字符串数组,长度为1
	char ch[1];

	// 创建或打开文件
	inputFile = fopen(fileName, "w");
	if (!inputFile)
	{
		printf("Failed to create/open file\n");
		exit(0);
	}

	printf("Please enter your strings!\n");
	// 控制台输入文字,EOF,即Ctrl+Z结束输入
	while ((ch[0]=getchar()) != EOF)
	{
		// 将控制台输入内容写入文件
		fprintf(inputFile, "%c", ch[0]);
	}
	//关闭文件
	fclose(inputFile);

	printf("\nStrings of you input:\n");
	// 以只读方式打开文件
	outputFile = fopen(fileName, "r");
	if (!outputFile)
	{
		printf("Failed to open file\n");
		exit(0);
	}

	// 逐行读取文件中的字符串,字符串最大程度为STRING_LENGTH,读取结束则退出
	while (fgets(temp, STRING_LENGTH,outputFile) != NULL)
	{
		// 每行字符串的长度
		int len = strlen(temp);
		// 将最后一个字符,即换行符改为'\0'
		temp[len - 1] = '\0';
		// 输出读取的内容
		printf("%s\n", temp);
		if (strlen(min1) == 0)
		{
			// 若min1还未赋值,则对min1赋值
			strcpy(min1, temp);
		}
		else if (strlen(min2) == 0)
		{
			// 若min1还未赋值,则对min2赋值
			strcpy(min2, temp);
		}
		else
		{
			// find min strings
			if (strlen(temp) < strlen(min1))
			{
				strcpy(min1, temp);
			}
			else if (strlen(temp) < strlen(min2))
			{
				strcpy(min2, temp);
			}
		}

		if (strlen(min1) > strlen(min2))
		{
			// 将min1和min2中,最短的字符串放在min1,次短min2
			strcpy(temp, min1);
			strcpy(min1, min2);
			strcpy(min2, temp);
		}

		// temp置空
		*temp = NULL;
	}
	fclose(outputFile);

	printf("\nShortest string:\n");
	printf("string1:%s\n", min1);
	printf("string2:%s\n", min2);

	system("pause");
	return 0;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 534
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以,学习一些,其实用c语言来写操作系统还是有点难度的
2018-10-14 23:52
0
雪    币: 5554
活跃值: (2138)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
加点难度,读取字符串后把\n\r全部替换为空,在写个算法
2018-10-15 09:50
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
4
该算法还有比较大的优化空间,大家可以讨论讨论
2018-10-15 12:31
0
雪    币: 105
活跃值: (4381)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个都能上精华?
2018-10-15 21:14
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
6
zzpydwz 这个都能上精华?
是关注,让大家讨论的意思,楼主分享自己的成果,分享加上讨论才能让这个帖子更加有意义
2018-10-15 21:56
0
雪    币: 105
活跃值: (4381)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
KevinsBobo 是关注,让大家讨论的意思,楼主分享自己的成果,分享加上讨论才能让这个帖子更加有意义
好吧,我错了.语言过激,抱歉哈
2018-10-15 22:04
0
雪    币: 575
活跃值: (112)
能力值: ( LV5,RANK:140 )
在线值:
发帖
回帖
粉丝
8
emmmmmm。。。
2018-10-16 18:11
0
雪    币: 382
活跃值: (352)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
9
看雪怎么了
2018-10-17 10:56
0
雪    币: 848
活跃值: (1262)
能力值: ( LV7,RANK:118 )
在线值:
发帖
回帖
粉丝
10
我也是刚入门,很多也都还在学习中,欢迎各位指导评论
2018-10-17 14:09
0
雪    币: 202
活跃值: (151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
加油,我还要雪碧,233
2018-10-18 20:51
0
雪    币: 6723
活跃值: (1199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
为何要全部写入再进行寻找呢?
可以边写入边比较
2018-10-20 14:48
0
雪    币: 848
活跃值: (1262)
能力值: ( LV7,RANK:118 )
在线值:
发帖
回帖
粉丝
13
边写边比较确实是一种比较好的方法,如果只需要最短字符串,那么写文件这一步都可以省略,当时这样写主要是考虑如果直接给一个文件,那就没有写操作,把前面的注释掉,稍加修改就可以直接用了
2018-10-20 15:05
0
雪    币: 189
活跃值: (121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
HAHA,感觉是C基础级别的吧
2018-10-26 20:52
0
游客
登录 | 注册 方可回帖
返回
//