gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:29:36 25 4
gpt4 key购买 nike

我想做一个代码来搜索 txt 文件并返回不同单词的数量以及它们在文本中出现的次数。我试图这样做,但在将从输入中读取的单词与已读取的单词进行比较时遇到问题。所以我正在编写一个代码,如果一个单词是新的,则将其添加到单词 vector 中,如果不是,则将单词计数增加 1。但是当我比较这些词时,它并没有表明它们是相等的,即使它们不相等。例如:txt 填充为:

test test test.
test test test.

(“测试。”=/= 来自“测试”)。它返回 7 个不同的单词,其中 3 个为 NULL,“3 test”和 1 个“test”。 。这应该返回 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);
}

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

最佳答案

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

-在 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);
}

您会对ctypes.h hereispunct()感兴趣

关于计算文本输入中的不同单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com