C 在字符串中搜索单词

标签 c string file search

我正在尝试编写一段代码,从控制台扫描字符串并尝试在 .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/

相关文章:

c - 在程序内部使用 EXIT_SUCCESS/EXIT_FAILURE 进行错误报告可以吗?

C - 如何比较2个字符串的索引?

c++ - C++ 中的 C 字符串删除

c++ - 警告 : format ‘%d’ expects argument of type ‘int *’ , 但参数 5 的类型为 ‘int’ [-Wformat=]

c - 没有连续 2 个 a 和 b 的正则表达式

c - 在命令行中使用 Tab 自动完成文本

perl - 从字符串中删除引号

c# - 如何使用 C# 以编程方式在 OpenFile 对话框中选择文件

不明白为什么我在 C 中打开文件时总是出错

C - 使用递归函数将文件夹和子文件夹中的所有 wav 文件路径放入字符串数组中