如何在文件中找到字符串?

时间:2015-07-29 16:42:10

标签: c

我是C的新手,最近完成了我的文件工作。我试图创建一个程序,它会在文件中找到一个输入的名称,但它不起作用。你能尝试修理吗?我会感恩的。

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *fr;
    int i,p,counter,final,length,j,c,k = 0;
    char name[256];
    char buffer[1024];

    fr = fopen("C:/Users/prixi/Desktop/HESLA.TXT","r");
    while ((c = fgetc(fr)) != EOF)
        counter++;

    printf("Enter the name");
    scanf("%s",&name);
    length = strlen(name);

    while (fscanf(fr, " %1023[^\n]", buffer) != EOF) {
        for (i = 0; i <= counter; i++)
            if (name[0] == buffer[i]){
                for (j = 0;j < length; j++ )
                    if (name[j] == buffer[i+j])
                        p++;
                    else
                        p = 0;

              /* The 2nd condition is there because after every name there is ' '. */
              if (p == length && buffer[i+j+1] == ' ')
                  final = 1;
          }
     }

     if ( final == 1 )
         printf("its there");
     else
         printf("its not there"); 
return 0;
}

它将文件内部加载到缓冲区,然后根据文件的长度按char扫描char。我知道它效率低而且速度慢,但我只用了4天才学习C语言。我真的希望你帮我修理自己的代码:D我可能无法入睡。

2 个答案:

答案 0 :(得分:3)

有很多方法可以将字符串搜索到文件中。 试试这个:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char *loadFile(const char *fileName);

int main (void) {
    const char *fileName = "test.txt";
    const char *stringToSearch = "Addams";
    char *fileContent = loadFile(fileName);

    if (strstr(fileContent, stringToSearch)){
        printf("%s was Found\n",stringToSearch);
    }else{
        printf("%s was not Found\n",stringToSearch);
    }

    free(fileContent);

    return 0;
}

char *loadFile(const char *fileName){
    size_t length,size;
    char *buffer;
    FILE *file;

    file = fopen (fileName , "r" );
    if (file == NULL){
        printf("Error fopen, please check the file\t%s\n",fileName);
        exit(EXIT_FAILURE);
    }


    fseek (file , 0 , SEEK_END);
    length = (size_t)ftell (file);
    fseek (file , 0 , SEEK_SET);

    buffer = malloc(length+1);
    if (buffer == NULL){
        fputs ("Memory error",stderr);
        exit (2);
    }

    size = fread (buffer,1,length,file);
    if (size != length){
        fputs ("Reading error",stderr);
        exit(3);
    }
    buffer[length] = '\0';

    fclose (file);
    return buffer;
}

输出:

  

发现了Addams

我在文件“test.txt”中有以下内容:

Michael Jackson
Bryan Addams
Jack Sparrow

答案 1 :(得分:0)

您的代码存在多个问题。您没有发布变量定义,因此我们无法验证它们是否一致使用,尤其是name应该是char的数组。

主要问题是:您通过读取来计算fr中的字节数,但在扫描字符串实例之前,您没有rewind流。