检索本地本文

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

char **pp = NULL;//存储指针数组的地址

int getfilesize(char *path)//获取文件大小
{
	FILE *pf;
	pf = fopen(path, "r");//读取的模式打开
	if (pf == NULL)
	{
		return -1;//代表获取失败
	}
	else
	{
		fseek(pf, 0, SEEK_END);//到文件末尾
		int num = ftell(pf);//文件开头到当前位置有多少字节
		fclose(pf);//关闭文件
		return num;
	}

}
int getn(char *path)//获取行
{
	FILE *pf;
	pf = fopen(path, "r");
	if (pf == NULL)
	{
		return -1;
	}
	else
	{
		int i = 0;
		while (!feof(pf))//判断是否到文件末尾
		{
			char str[275];//缓冲区
			fgets(str, 275, pf);//读取一行
			i++;//统计多少行
		}
		fclose(pf);//关闭文件
		return i;
	}
}
//有13180807行  存储成指针就是50M
void initdatatomem(char *path)
{
	pp = (char**)malloc(sizeof(char*) * 13180807);
	FILE *pf = fopen(path, "r");
	if (pf == NULL)
	{
		printf("fail");
	}
	else
	{
		
		for (int i = 0; i < 13180807; i++)
		{
			char str[275] = {0};//缓冲区
			fgets(str, 275, pf);//从文件中逐行读取字符串
			int strlength = strlen(str) + 1;//获取要分配的字符串的长度
			char *px = (char*)malloc(sizeof(char)*strlength);//分配内存
			strcpy(px, str);//拷贝字符串
			px[strlength - 1] = '\0';//设定最后一个字符为'\0'
			pp[i] = px;//存入指针数组
		}
	}
	printf("载入内存OK");
}

void findstr(char *searchstr)
{
	for (int i = 0; i < 13180807; i++)
	{
		char *ptemp = strstr(pp[i], searchstr);//便利所有指针数组地址,字符串查找
		if (ptemp != NULL)
		{
			printf("\n%s", pp[i]);
		}
	}
}

void main()
{
	/*char *path = "F:\\C基础\\c就业\\20140729\\dangdang.txt";
	int num = getfilesize(path);
	printf("%d字节,%fK,%fM", num, num / 1024.0, num / 1024.0 / 1024.0);
	printf("\n有%d行", getn(path));*/

	char *path = "F:\\C基础\\c就业\\20140729\\dangdang.txt";
	initdatatomem(path);
	char searchstr[100] = { 0 };
	scanf("%s", searchstr);
	findstr(searchstr);


	system("pause");
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值