从文本输入中计算不同的单词

时间:2014-10-02 16:51:57

标签: c string

我想做一个搜索txt文件的代码,并返回不同单词的数量以及它们在文本上出现的次数。 我'试图这样做,但我在将输入读取的单词与已读取的单词进行比较时遇到了问题。所以我做了一个代码,如果是新的,就会在单词的向量上添加一个单词,如果它不是,它会增加1个单词的数量。但是,当我比较这些词时,它并没有表明即使它们不是,它们也是平等的。 例如:txt填充:

test test test.
test test test.

(" test。" = / = from" test")。它返回7个不同的单词,其中3为NULL," 3 test"和1"测试。" 。这应该返回2个单词并在测试时计数4并在测试时计数2。

有人可以看到我的代码有什么问题吗?

#define MAX_PALAVRAS 1024
#define MAX_TAM_PALAVRA 32

typedef struct ocorrencia_ {
    char palavra[MAX_TAM_PALAVRA];
    int pos;
    int num_ocorrencias;
}ocorrencia;

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


 int main (int argc, char * argv[]){
    ocorrencia palavras[MAX_PALAVRAS];
    int i,palavras_diferentes=0,palavra_atual=0;
    char aux[MAX_TAM_PALAVRA];
    bool nova_palavra=true;
    for (i=0;i<MAX_PALAVRAS;i++){
        palavras[i].pos=-1;
        palavras[i].num_ocorrencias=0;
    }
    FILE * D = fopen("input.txt","r");
    while (!feof(D)){
        char aux2[MAX_TAM_PALAVRA];
        fscanf(D,"%s",aux);
        for (i=0;i<palavras_diferentes;i++){
            if (strcmp(palavras[palavras_diferentes].palavra,aux)==0){
                nova_palavra=false;
                break;
            }
            palavra_atual++;
        }
        if (nova_palavra){
            strcpy(palavras[palavra_atual].palavra,aux);
            palavras_diferentes++;
        }
        palavras[palavra_atual].num_ocorrencias++;
        printf("%s\n",palavras[palavra_atual].palavra);
    }
    fclose (D);
    printf("diferent words=%i\n",palavras_diferentes);
    printf("success!\n");
    return (EXIT_SUCCESS);
}

感谢您花时间阅读或尝试提供帮助!

1 个答案:

答案 0 :(得分:1)

根据我的评论,以下是一些可能对您有所帮助的更改:

- 在while循环的开头设置palavra_atual为0,将nova_palavra设置为true

- 测试fscanf的返回,添加if(fscanf(D,"%s",aux)==1){...}

之类的内容

- 测试所有的话! if (strcmp(palavras[i].palavra,aux)==0)

以下是代码:

#define MAX_PALAVRAS 1024
#define MAX_TAM_PALAVRA 32

typedef struct ocorrencia_ {
    char palavra[MAX_TAM_PALAVRA];
    int pos;
    int num_ocorrencias;
}ocorrencia;

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


int main (int argc, char * argv[]){
    ocorrencia palavras[MAX_PALAVRAS];
    int i,palavras_diferentes=0,palavra_atual=0;
    char aux[MAX_TAM_PALAVRA];
    bool nova_palavra=true;
    for (i=0;i<MAX_PALAVRAS;i++){
        palavras[i].pos=-1;
        palavras[i].num_ocorrencias=0;
    }
    FILE * D = fopen("input.txt","r");
    while (!feof(D)){
        palavra_atual=0;
        nova_palavra=true;
        char aux2[MAX_TAM_PALAVRA];
        if(fscanf(D,"%s",aux)==1){
            for (i=0;i<palavras_diferentes;i++){
                if (strcmp(palavras[i].palavra,aux)==0){
                    nova_palavra=false;
                    break;
                }
                palavra_atual++;
            }
            if (nova_palavra==true){
                printf("new word %d %s\n",palavra_atual,aux);
                strcpy(palavras[palavra_atual].palavra,aux);
                palavras_diferentes++;
            }
            palavras[palavra_atual].num_ocorrencias++;
            printf("%s\n",palavras[palavra_atual].palavra);
        }
    }
    fclose (D);
    printf("diferent words=%i\n",palavras_diferentes);
    printf("success!\n");
    return (EXIT_SUCCESS);
}

ispunct() ctypes.h here

会对您感兴趣