-
-
[原创]C语言文件利用读写操作,寻找输入文件中的两个最短字符串
-
发表于:
2018-10-14 13:37
6160
-
[原创]C语言文件利用读写操作,寻找输入文件中的两个最短字符串
今天给大家分享一下如何在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;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)