c语言从文件中查找字符串
我想写一个程序,要求程序读取一个文件中的部分数据,然后存放到一个文本文档里.但是有几个问题需要解决:首先,文件大小未知,可能是几十兆,也可能是几百兆,所以要求算法得有效率...
我想写一个程序,要求程序读取一个文件中的部分数据,然后存放到一个文本文档里.但是有几个问题需要解决:
首先,文件大小未知,可能是几十兆,也可能是几百兆,所以要求算法得有效率
第二,要读取文件中所有的以"http://"开头,以".html"结尾的字符串,,该如何设计这个算法?
我接触c语言时间不长,不清楚有没有个函数解决这个问题,如果有的话请看官告知,可以告诉原理,也可以写出示例代码,只要注释详细点即可.谢谢 展开
首先,文件大小未知,可能是几十兆,也可能是几百兆,所以要求算法得有效率
第二,要读取文件中所有的以"http://"开头,以".html"结尾的字符串,,该如何设计这个算法?
我接触c语言时间不长,不清楚有没有个函数解决这个问题,如果有的话请看官告知,可以告诉原理,也可以写出示例代码,只要注释详细点即可.谢谢 展开
展开全部
这需要使用匹配算法来实现,具体参考代码如下:
#include <stdio.h>
#include <stdlib.h>
#define stringSize(string) (sizeof(string) * sizeof(char))
void contains(char *, int, FILE *);
int main(void) {
FILE * fp;
char * fileName = "a.txt";
char str[] = "beautiful";
if((fp = fopen(fileName, "rb")) == 0) {
printf("Can't open %s, program will to exit.", fileName);
exit(1);
}
contains(str, stringSize(str), fp);
fclose(fp);
return 0;
}
void contains(char * string, int stringSize, FILE * fp) {
int i = 0, j, end;
char * part = (char *)calloc(stringSize, sizeof(char));
fseek(fp, 0L, SEEK_END);
end = ftell(fp) - stringSize + 2;
while(i < end) {
j = 0;
fseek(fp, (long)i++, SEEK_SET);
fgets(part, stringSize, fp);
while(*part) {
if(*string == *part) {
j++;
string++;
part++;
continue;
}
break;
}
if(j == stringSize - 1) {
printf("OK\n");
break;
} else {
string -= j;
part -= j;
}
}
free(part);
}
注意事项:
1、如果程序输出 OK 则代表这个文件中包含该字符串,无任何输出则代表不能匹配该字符串。
2、如果一个字符串在文件中是以换行分隔的,则不能匹配。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
想了个效率比较低的:
1.fopen打开文件
2.fread每次读取一个字节和h(http的首字母)比较,成功了后再比较t,等等,如果都成功,说明http://匹配成功,然后将以后的字符读入到数组或文件中,同时用同样的方法检测.html字串。检测到.html字串就停止对数组或文件的写入。
如果有任何一个不匹配,重复步骤2(还得重新从比较h开始)
在怎么有效率也得遍历整个文件,我实在想不出什么别的更有效率的方法了。难道用哈希?散列?
1.fopen打开文件
2.fread每次读取一个字节和h(http的首字母)比较,成功了后再比较t,等等,如果都成功,说明http://匹配成功,然后将以后的字符读入到数组或文件中,同时用同样的方法检测.html字串。检测到.html字串就停止对数组或文件的写入。
如果有任何一个不匹配,重复步骤2(还得重新从比较h开始)
在怎么有效率也得遍历整个文件,我实在想不出什么别的更有效率的方法了。难道用哈希?散列?
追问
哈希?散列?是神马?效率高就用...好吧,我也是这么想的,如果没有更好答案的话,就采纳兄弟你的了,麻烦等待一天吧,看看还有没有其他方法
追答
兄弟非得用c吗?其实我觉得处理字串用perl灰常方便~如果是实际问题,不是老师的c语言作业,你可以考虑一下
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这好像不是同一种语言,我看了这么久C 都没看见过http//
更多追问追答
追问
呃,c中当然没有这个,我的意思是要读取的文件中有"http://...................html"格式的字符串,要读出这些个字符串
追答
按你的说法 只要在printf函数中输入就可以了啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询