2013-06-04 4 views
0

나는 텍스트 문서에서 각 고유 용어의 발생 횟수를 세는 다음 코드를 가지고있다. 내가 제대로 '\0'C 문자열을 올바르게 null로 종료하는 방법은 무엇입니까?

#include <stdio.h> 
#include <string.h> 
int main() 
{ 
    int c; 
    FILE *file; 
    int NUMBER_OF_WORDS = 100; 
    int MAX_WORD_LENGTH = 30; 

    char uniqueWords[NUMBER_OF_WORDS][MAX_WORD_LENGTH+1]; 
    int wordCount[NUMBER_OF_WORDS]; 
    int uniqueWordIndex =0; 

    char tempWord[MAX_WORD_LENGTH+1]; 
    int tempWordIndex = 0; 

    file = fopen("sample.txt", "r"); 
    if (file) { 
     while ((c = getc(file)) != EOF && uniqueWordIndex < 100){ 
      if(isalpha(c)){ 
       tempWord[tempWordIndex] = c; 
       tempWordIndex++; 
      }else if ((c == ' ' || c == '\n') && strlen(tempWord) > 0 ) { 
       tempWord[tempWordIndex] = '\0'; 
       int k = 0; 
       int newUnique = 1; 
       for (k=0; k<NUMBER_OF_WORDS; k++){ 
        if (strcmp (tempWord, uniqueWords[k]) == 0){ 
         wordCount[k]++; 
         newUnique = 0; 
         break; 
        } 
       } 
       if (newUnique){ 
        int i=0; 
        wordCount[uniqueWordIndex] = 1; 
        for (i=0; i<strlen(tempWord); i++) 
         uniqueWords[uniqueWordIndex][i] = tempWord[i]; 
        uniqueWords[uniqueWordIndex][i] = '\0'; 
        uniqueWordIndex++; 
       } 

       tempWordIndex = 0; 

      } 
     } 
     int i =0; 
     for (i =0; i< NUMBER_OF_WORDS; i++){ 
      int k = 0; 
      for (k =0; k< strlen(uniqueWords[i]); k++) 
       printf("%c",uniqueWords[i][k]); 
       printf(" %d\n", wordCount[i]); 
     } 
     fclose(file); 
    } 
    return(0); 
} 

이 같은 엉뚱한 출력 결과 상관 없음 구문 오류가 각 C - ​​문자열을 종료 생각? 당신이 또는 wordCountNUMBER_OF_WORDS 항목이 보장되지 않습니다처럼

term 2 
something 5 
reading 1 
level 1 
!J<8F><FF>^? 0 
<C8>B~8<91>^? 0 
+0

이 출력이 주어진 코드와 일치하지 않습니다. 다른 정보가 있습니까? –

+1

'gdb'를 통해 코드를 실행 했습니까? 그렇지 않다면 왜 안 되겠습니까? 이와 같은 문제는 디버거가 무엇을 위해 만들어 졌는지에 대한 것입니다 ... – Will

+2

왜'printf','strlen'과'strcmp'를 사용할 수 있지만'scanf' 나'strcpy'를 사용할 수 없습니까? 이것은 나에게 직업 *을위한 잘못된 도구를 사용하는 예와 같습니다. – Sebivor

답변

3

그것은 보이는,하지만 당신은 밖으로 인쇄 할 말 많은 그. 출력물에 대한 책임 여부에 관계없이 입력 한 내용이 NUMBER_OF_WORDS 개의 고유 단어 미만인 경우 해당 출력이 생성됩니다.

+1

실제로. 그 루프는 아마도'i == uniqueWordIndex' 때 종료되어야합니다. – Sebivor

관련 문제