2017-01-08 20 views
0

文字列をコンソールからスキャンして、同じ単語を.txtファイルで検索しようとしています。次に、単語を印刷し、その正または負の単語がある場合は印刷します。C文字列内の単語を検索する

agree: POZ beautiful: POZ amazing: POZ deny: NEG disgusting: NEG bad: NEG

をしかし、いくつかの理由で二しばらくは動作しませんであれば:

.txtファイルは、次のようになります。どんな助けもありがとうございます。

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ステートメントは、trueでないように無視されます。このブロック全体:

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"); 
} 
+0

"もし"あなたが "働いていない"という意味と、 "働いていない"とはどういう意味ですか? ifブロックに入っていない、アプリケーションがクラッシュしている、何が「動作していない」のですか? – pstrjds

+0

'vrsta1'は改行を含みます。 'pch1'は最後の単語です。 – BLUEPIXY

+1

あなたがプリントアウトしたか(またはデバッガをステップインして)比較している文字列の値を見て、あなたが比較していると考えるものを比較していることを確認しましたか? – pstrjds

答えて

0

で...

agree: POZ 

あなたは結果がrijec先頭にポイントし#として書か\0(以下である: ...

rijec =(strtok(line,":")); 

までスキャン):の位置:

その位置を指し

vrsta =(strtok(NULL," ")); 

結果でvrsta、その位置は(#として書か未満)\0である:

agree# POZ 
^ 
rijec 

は次に、までスキャンする

agree##POZ 
    ^
     vrsta 

vrsta点空の文字列。それを進める必要があります - より良い - トークン化を続ける可能性があります。\nを区切り文字として使用します。

関連する問題