2013-02-11 3 views
0

왜이 기능이 작동하지 않는지 알아낼 수는 없습니다. 파일에서 단어 목록의 빈도 검사를해야하고 문자열 배열의 요소에 대해 현재 단어를 검사하고 문자를 읽을 때 문자가 같지 않은지 확인하려고합니다. 그것을 추가하십시오. 코드는 다음과 같습니다.배열에서 문자열을 기준으로 파일에서 읽은 단어 확인

fin.open(finFile, fstream::in); 

if(fin.is_open()) { 
    int wordArrSize; 
    while(!fin.eof()) { 
     char buffer[49]; //Max number chars of any given word in the file 
     wordArrSize = words.length(); 

     fin >> buffer; 

     if(wordArrSize == 0) words.push_back(buffer); 

     for(int i = 0; i < wordArrSize; i++) { //Check the read-in word against the array 
      if(strcmp(words.at(i), buffer) != 0) { //If not equal, add to array 
       words.push_back(buffer); 
       break; 
      } 
     } 



     totNumWords++; //Keeps track of the total number of words in the file 
    } 
    fin.close(); 

학교 프로젝트 용입니다. 우리는 어떤 컨테이너 클래스도 사용할 수 없으므로 char ** 배열을 확장하고 요소를 뒤로 밀고 튀기는 등의 구조를 만들었습니다.

+2

@Alex, 왜 지구에서 숙제를 물어 보지 않아야합니까? – SingerOfTheFall

+0

@SingerOfTheFall 나는 그들이 금지 된 줄 알았습니까? –

+1

@Alex, 아니요, 더 이상 [tag : 숙제]로 질문에 태그를 지정하지 않습니다. 숙제 문제는 다른 질문과 다르지 않습니다. [tag : 숙제] 태그 정보 – SingerOfTheFall

답변

1
for(int i = 0; i < wordArrSize; i++) { //this part is just fine 
    if(strcmp(words.at(i), buffer) != 0) { //here lies the problem 
     words.push_back(buffer); 
     break; 
    } 
} 

의 외부 배열에 추가하는 경우 확인하는 플래그를 넣어 배열의 단어는 i입니다. 따라서 대부분의 경우 루프를 시작할 때 첫 번째 반복이 될 것입니다. 즉, 문자열 목록의 첫 번째 단어가 버퍼와 ​​일치하지 않는주기의 시작 부분에 문자열 목록에 버퍼를 추가하고주기를 중단합니다.

words 배열 전체를 확인한 다음 배열에 버퍼를 추가해야합니다. 그래서 이런 식으로해야합니다 :

bool bufferIsInTheArray = false;//assume that the buffered word is not in the array. 
for(int i = 0; i < wordArrSize; i++) { 
    if(strcmp(words.at(i), buffer) == 0) { 
     //if we found a MATCH, we set the flag to true 
     //and break the cycle (because since we found a match already 
     //there is no point to continue checking) 
     bufferIsInTheArray = true; 
     break; 
    } 
//if the flag is false here, that means we did not find a match in the array, and 
//should add the buffer to it. 
if(bufferIsInTheArray == false) 
    words.push_back(buffer); 
} 
+0

그게 다 했어, 고마워! 왜 내가이 새벽에 나에게 새벽이되지 않았는지 모르겠다. 내 논리가 처음에는 완전한 증거였던 것처럼 보였다. –

1

코드 words.push_back(buffer);은 for 루프 외부에 있어야한다고 생각합니다. 당신은 루프 내부 배열의 버퍼를 발견하고 플래그에 따라 현재 단어가 일치하지 않습니다 당신은 당신의 if 문마다 암호를 입력합니다 루프

+0

시도해 보았습니다. 이것은 두 개의 char *를 사용하는 strcmp()와 아무런 관련이 없습니까? buffer [49]는 뭔가 빠져 있지 않으면 포인터가 될 때까지 쇠퇴해야합니다. 다른 설명은 없습니다 ...이 수표는 잘려서 말려 야합니다 –

+0

정말이에요. 내가 말한 수정은 정확히 위의 답변에 코딩되어 있습니다. 당신은 그 대답을 시도 했습니까? 하나의 단어가 단어와 다른 경우 코드에서 배열에 추가됩니다. – 999k

+0

@TaylorBishop 실제로 포인터로 쇠약하게됩니다. –

관련 문제