我正在尝试编写一段代码,从控制台扫描字符串并尝试在 .txt 文件中查找相同的单词。然后打印该单词并打印它是积极的还是消极的单词。
.txt 如下所示:
同意:POZ
美丽:POZ
惊人:POZ
否定:否定
恶心:NEG
坏:否定
但由于某种原因,第二个 while 中的 if 不起作用。如有任何帮助,我们将不胜感激。
int main()
{
char *rijec;
char *vrsta;
char line[200+1];
char konzola[420+1];
char *pch;
char pch1[500];
char rijec1[100];
char vrsta1[50];
//char *ret;
FILE *ulaz;
FILE *izlaz;
ulaz = fopen("Sentiment.txt","r");
izlaz = fopen("RezultatAnalize.txt","w");
if(ulaz == NULL || izlaz == NULL)
exit(1);
scanf(" %420[^\n]", konzola);
printf("\nKonzola: %s\n", konzola);
pch = strtok (konzola," .!");
//strcpy(pch1, pch);
while (pch != NULL)
{
//strcpy(pch, pch1);
printf ("\- %s -", pch1);
strcpy(pch1, pch);
pch = strtok (NULL, " ,.!");
//strcpy(pch1, pch);
}
while (fgets(line, 200, ulaz) != NULL){
rijec =(strtok(line,":"));
vrsta =(strtok(NULL," "));
strcpy(rijec1, rijec);
strcpy(vrsta1, vrsta);
printf("\n%s = %s", rijec, vrsta);
if(strcmp(rijec1,pch1) == NULL){
//printf("\nA match has been found");
printf(" %s......", rijec1);
if (strcmp(vrsta1,"POZ") == 0)
printf("Analiza: pozitivna");
else if (strcmp(vrsta1,"NEG") == 0)
printf("Analiza: negativna");
}
}
它只是忽略 if 语句,就像它不正确一样。整个区 block :
if(strcmp(rijec1,pch1) == NULL)
{
//printf("\nA match has been found");
printf(" %s......", rijec1);
if (strcmp(vrsta1,"POZ") == 0)
printf("Analiza: pozitivna");
else if (strcmp(vrsta1,"NEG") == 0)
printf("Analiza: negativna");
}
最佳答案
在……
agree: POZ
您扫描到:
...
rijec =(strtok(line,":"));
结果是rijec
指向开头,并且在位置有一个
:\0
(下面写成#
) :
agree# POZ
^
rijec
然后扫描到:
vrsta =(strtok(NULL," "));
结果是vrsta
指向该位置,该位置为\0
(下面写为#
):
agree##POZ
^
vrsta
vrsta
指向一个空字符串。您必须推进它 - 或者更好 - 继续使用可能的 \n
作为分隔符进行标记。
关于C 在字符串中搜索单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41532938/