检索本地本文

来源:互联网 发布:俄罗斯 苏联 知乎 编辑:程序博客网 时间:2024/04/27 21:40
#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行  存储成指针就是50Mvoid 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");}

原创粉丝点击