c语言从文件中查找字符串

我想写一个程序,要求程序读取一个文件中的部分数据,然后存放到一个文本文档里.但是有几个问题需要解决:首先,文件大小未知,可能是几十兆,也可能是几百兆,所以要求算法得有效率... 我想写一个程序,要求程序读取一个文件中的部分数据,然后存放到一个文本文档里.但是有几个问题需要解决:

首先,文件大小未知,可能是几十兆,也可能是几百兆,所以要求算法得有效率

第二,要读取文件中所有的以"http://"开头,以".html"结尾的字符串,,该如何设计这个算法?

我接触c语言时间不长,不清楚有没有个函数解决这个问题,如果有的话请看官告知,可以告诉原理,也可以写出示例代码,只要注释详细点即可.谢谢
展开
 我来答
大宝妈谈教育
高粉答主

2020-05-02 · 关注我不会让你失望
知道小有建树答主
回答量:3306
采纳率:100%
帮助的人:54.3万
展开全部

c语言从文件中查找字符串的方法。

如下参考:

1.打开python命令窗口,定义并分配字符串变量s1。

2.调用字符串中的count方法degree来查找字符#在s1中出现的次数。

3.除了第一个参数外,count()方法还可以有第二个参数来指示从何处开始搜索。

4.在count方法中,还可以在开始位置和结束位置之间添加第三个参数,即结束位置。

5.如果要查找的子字符串不在字符串中,则返回的结果为0。

6.最后,在count()方法中添加所有三个参数来查找对应的字符串。

一骑当后
推荐于2017-09-11 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306440
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部

这需要使用匹配算法来实现,具体参考代码如下:

#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、如果一个字符串在文件中是以换行分隔的,则不能匹配。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wwthappy
推荐于2017-10-01 · 超过27用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:53.6万
展开全部
想了个效率比较低的:
1.fopen打开文件
2.fread每次读取一个字节和h(http的首字母)比较,成功了后再比较t,等等,如果都成功,说明http://匹配成功,然后将以后的字符读入到数组或文件中,同时用同样的方法检测.html字串。检测到.html字串就停止对数组或文件的写入。
如果有任何一个不匹配,重复步骤2(还得重新从比较h开始)
在怎么有效率也得遍历整个文件,我实在想不出什么别的更有效率的方法了。难道用哈希?散列?
追问
哈希?散列?是神马?效率高就用...好吧,我也是这么想的,如果没有更好答案的话,就采纳兄弟你的了,麻烦等待一天吧,看看还有没有其他方法
追答
兄弟非得用c吗?其实我觉得处理字串用perl灰常方便~如果是实际问题,不是老师的c语言作业,你可以考虑一下
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lansezsw
2011-03-15
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
这好像不是同一种语言,我看了这么久C 都没看见过http//
更多追问追答
追问
呃,c中当然没有这个,我的意思是要读取的文件中有"http://...................html"格式的字符串,要读出这些个字符串
追答
按你的说法  只要在printf函数中输入就可以了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式