12306泄露的数据,快速查找有木有你的, 编程实现示例

</pre><pre code_snippet_id="576257" snippet_file_name="blog_20150110_2_9643624" name="code" class="objc">

/**********************************************************************
* 版权所有 (C)2015, Wu Yingqiang
*
* 文件名称: BigData.c
* 文件标识:无
* 内容摘要:用于演示在大数据中查找指定的字符
* 其它说明:无
* 当前版本: V1.0
* 作    者:吴英强
* 完成日期: 20150109
*
* 修改记录1:// 修改历史记录, 包括修改日期、版本号、修改人及修改内容
* 修改日期: 20150109
* 版本号: V1.0
* 修改人: 吴英强
* 修改内容:创建
**********************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <time.h>

char gPath[200] = "E:\\12306数据.txt";
#define  N   119153
char str[100] = { 0 };//要查找的字符串

char **gPtr = NULL;//二级指针存储一级指针数组的地址

/**********************************************************************
* 功能描述:获取文件有多少行
* 输入参数:无
* 输出参数:无
* 返回值: 行数  -1-失败
* 其它说明:无
* 修改日期          版本号           修改人         修改内容
* --------------------------------------------------------------------------------------
* 20150109           V1.0             Wuyq            创建
***********************************************************************/
int GetLineNum()
{
	int iFileSize = 0;
	FILE *pfr = fopen(gPath, "r");
	if (pfr == NULL)
	{
		return -1;
	}
	else
	{
		int i = 0;
		while (!feof(pfr))
		{
			char strbuffer[256] = { 0 };
			fgets(strbuffer, 256, pfr);//读取一行
			i++;
		}
		iFileSize = ftell(pfr);
		printf("文件大小为:%f M\n", 1.0*iFileSize/1024/1024);
		fclose(pfr);//关闭文件
		return i;
	}
}

/**********************************************************************
* 功能描述:初始化,把文件内容读到内存中
* 输入参数:无
* 输出参数:无
* 返回值: 无
* 其它说明:无
* 修改日期          版本号           修改人         修改内容
* --------------------------------------------------------------------------------------
* 20150109           V1.0             Wuyq            创建
***********************************************************************/
void Init()
{
	gPtr = (char **)malloc(sizeof(char *)*N);//动态分配一个指针数组
	memset(gPtr, '\0', sizeof(char *)*N);

	FILE *pfr = fopen(gPath, "r");
	if (pfr == NULL)
	{
		printf("初始化失败\n");
		return;
	}
	else
	{
		for (int i = 1; i <= N; i++)
		{
			char strbuffer[512] = { 0 };
			fgets(strbuffer, 512, pfr);//读取一行
			int length = strlen(strbuffer);//求获取长度
			if (length != 0)
			{
				gPtr[i] = malloc(sizeof(char)*(length + 1));//每个指针分配内存
				if (gPtr[i] == NULL)
				{
					printf("\nfail");
				}
				strcpy(gPtr[i], strbuffer);//拷贝字符串
				//printf("\n%s", gPtr[i]);//打印结果
			}
		}
		fclose(pfr);//关闭文件
	}
}
/**********************************************************************
* 功能描述:释放内存
* 输入参数:无
* 输出参数:无
* 返回值: 无
* 其它说明:无
* 修改日期          版本号           修改人         修改内容
* --------------------------------------------------------------------------------------
* 20150109           V1.0             Wuyq            创建
***********************************************************************/
void Free()
{
	for (int i = 1; i <= N; i++)
	{
		free(gPtr[i]);
	}
}
/**********************************************************************
* 功能描述:搜索数据
* 输入参数:要搜索的字符串,由用户输入
* 输出参数:无
* 返回值: 无
* 其它说明:无
* 修改日期          版本号           修改人         修改内容
* --------------------------------------------------------------------------------------
* 20150109           V1.0             Wuyq            创建
***********************************************************************/
void Search(char *str)
{
	for (int i = 1; i <= N; i++)
	{
		if (gPtr[i] != NULL)
		{
			char *p = strstr(gPtr[i], str);//查询
			if (p != NULL)
			{
				printf("所要查找的字符串, 在第%d行\n", i);//打印结果
				printf("%s\n", gPtr[i]);
			}
		}
	}	
}
/**********************************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其他说明:无
* 修改日期        版本号           修改人          修改内容
* ---------------------------------------------------------------------
* 20150109         V1.0             Wuyq            创建
***********************************************************************/
void main()
{
	printf("文件总共有%d行\n", GetLineNum());

	Init();
	printf("已经加载完成\n");	

	time_t start, end;
	time(&start);
	printf("请输入您要查找的数据:\n");
	scanf("%s", str);
	Search(str);
	time(&end);
	printf("\n一共用时%d S\n", (unsigned int)(end - start));

	Free();
	printf("释放内存完成\n");
	system("pause");
}



12306泄露的数据,快速查找有木有你的, 编程实现示例_第1张图片

后期需要改善: 汉字的问题。



你可能感兴趣的:(12306泄露的数据,快速查找有木有你的, 编程实现示例)