| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5794 人关注过本帖
标题:如何从一个文件中搜索该单词并输出该单词~
只看楼主 加入收藏
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 9楼 九转星河
原来你说的帮忙是看代码,原谅我……昨天晚上没理解。

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    FILE *p;
    char s[3][10];
    char t[3][10];
    char tem[10];
    int i=0;
    scanf("%s",tem);
   
    if((p=fopen("D:\\f.txt","r"))==NULL)
    {
        printf("cant open file");
        exit(0);
    }
    for(i=0; i<3; i++)//原来就读取3个单词,汗……我测试了两次才发现。这种情况下,你用fgets()的返回值做循环结束的判断更好。
    {//while( NULL != fgets( s[ i ], 10, p ) )
        strcpy(t[i],fgets(s[i],10,p));
        t[i][strlen(t[i])-1]='\0';
        if(strcmp(tem,t[i])==0)
        {
            printf("%s\n",t);//这里应该是 printf( "%s\n", t[ i ] );
        }
    }
    fclose(p);
    return 0;
}


[此贴子已经被作者于2017-6-18 06:04编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-18 05:42
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
@renkejun1942

这次是输入单词~然后在文件中找到该单词并输出其对应中文的意思~帮忙看看代码哪里出问题了~~~
f.rar (427 Bytes)

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct word
{
    char s[3][10];
    char z[3][10]
}w[3];
int main()
{
    FILE *p;

   // char s[3][10];
    char t[3][10];
    char tem[10];
    int i=0;
    scanf("%s",tem);

    if((p=fopen("f:\\f.txt","r"))==NULL)
    {
        printf("cant open file");
        exit(0);
    }
    for(i=0; i<3; i++)
    {
        strcpy(t[i],fgets(w[i].s,10,p));
        t[i][strlen(t[i])-1]='\0';
        if(strcmp(tem,t[i])==0)
        {
            printf("%s\n",w[i].s);
        }
    }
    fclose(p);
    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-18 17:33
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 10楼 renkejun1942
如果要进行一些高级一点的文件操作~感觉还是用数据库比较好~在查找大量数据里面~数据库的效率应远比单纯的文件查找效率高~这和数据库的储存结构框架系统化有关~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-18 17:36
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 12楼 九转星河
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct word
{
    char s[3][10];
    char z[3][10]
}w[3];
int main()
{
    FILE *p;

   // char s[3][10];
    char t[3][10];
    char tem[10];
    int i=0;
    scanf("%s",tem);

    if((p=fopen("c:\\users\\medivh\\desktop\\f.txt","r"))==NULL)
    {
        printf("cant open file");
        exit(0);
    }
    for(i=0; i<3; i++)
    {
        strcpy(t[i],fgets(w[i].s,10,p));//fgets()函数当读取到EOF或回车时停止读取。
        t[i][strlen(t[i])-1]='\0';//因此你实际上读取到的单词,以第一个为例,是 (aim 目标)
        if(strcmp(tem,t[i])==0)//所以当你输入aim时,当然同读取到的字符串不一致
        {//单词读取,真的,你看看我的那个函数,调用库函数处理这些很难
            printf("%s\n",w[i].s);//库函数无法适应这些多种多样的需求,不仅仅是因为某些函数不安全
        }
    }//而且还涉及到宽字符。宽字符如何处理,我还不清楚。你应该自己查一下。
    fclose(p);
    return 0;
}


[此贴子已经被作者于2017-6-18 17:43编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-18 17:40
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 14楼 renkejun1942
那能否帮忙看看怎么改改~
现在我先处理点事~要么晚点有时间还是我自己弄弄吧~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-18 17:44
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 15楼 九转星河
该的话挺容易,但是宽字符我不一定能搞定,如果搞不定,我会将宽字符部分改成拼音。

汗……我帮你重写怎么样?

[此贴子已经被作者于2017-6-18 17:48编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-18 17:47
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 15楼 九转星河
程序代码:
/*偷笑,久久把简单的事情搞复杂了。*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    FILE *p;

    char src[50];//宽字符占用2个字节,所以用来存储的数组要开大点儿,嗯……我已经很久不用数组读取字符串了。自从完成了我的几个读取函数,我越来越懒了。
    char tem[10];
    int i=0;
    int leng;

    scanf("%s",tem);
    leng = strlen( tem );//只比较输入单词长度的字符数

    if((p=fopen("c:\\users\\medivh\\desktop\\f.txt","r"))==NULL)
    {
        printf("cant open file");
        exit(0);
    }

    for(i=0; i<3; i++)
        if( 0 == strncmp( fgets( src, 50, p ), tem, leng ) )//严格来说这样写不好,但是简单起见就这样吧,而且你的while也做出了读取限制。
        {
            printf( "%s", src + leng + 1 );//如果相同,跳过单词部分,直接输出中文意思,+1 是了跳过文件字符串中的空格。
            break;
        }

    fclose(p);
    return 0;
}


[此贴子已经被作者于2017-6-18 18:03编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-18 17:58
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 17楼 renkejun1942
久久是这样改改的~虽然用fscanf不是很安全~不过改进一下可以加输入数量限制~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct word
{
    char s[3][10];
    char z[3][10];
}w[3];


int main()
{
    FILE *p;

    char t[3][10];
    char tem[10];
    int i=0;

    scanf("%s",tem);

    if((p=fopen("D:\\f.txt","r"))==NULL)
    {
        printf("cant open file");
        exit(0);
    }

    for(i=0; i<3; i++)
    {
        fscanf(p,"%s",t[i]);

        if(strcmp(tem,t[i])==0)
        {
            strcpy(w[i].z,t[i]);
            fscanf(p,"%s",w[i].s);

            printf("%s\n",w[i].z);
            printf("%s\n",w[i].s);
        }
    }
    fclose(p);
    return 0;
}


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-18 18:11
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
不过就是每行占用的字节数目不一定相同~这和文件储存的结构有关~不然直接用fread就可以了~虽然fread更适用于二进制文件~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-18 18:25
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
然后改了改~这样也可以~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct word
{
    char s[3][10];
    char z[3][10];
}w[3];


int main()
{
    FILE *p;

    char t[3][10];
    char tem[10];
    int i=0;

    scanf("%s",tem);

    if((p=fopen("D:\\f.txt","r"))==NULL)
    {
        printf("cant open file");
        exit(0);
    }

    for(i=0; i<3; i++)
    {
        fscanf(p,"%s%s",w[i].s,w[i].z);

        if(strcmp(tem,w[i].s)==0)
            printf("%s\n",w[i].z);

    }
    fclose(p);
    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-18 19:08
快速回复:如何从一个文件中搜索该单词并输出该单词~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.076604 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved