2012-11-25 5 views
1

안녕하세요.이 프로그램에 대해 안녕하세요. 문자열의 단어 수를 계산해야합니다. 지금까지 문자열에서 문자의 수를 찾는 방법을 알아 냈지만 단어를 만드는 문자를 바꾸는 방법을 알아 내지 못하고 1 단어로 계산합니다. 문자열의 단어 수를 계산합니까?

int wordcount(char word[MAX]){ 

    int i, num, counter, j; 

    num = strlen(word); 
    counter = 0; 

    for (i = 0; i < num; i++) 
    { 
     if (word[i] != ' ' || word[i] != '\t' || word[i] != '\v' || word[i] != '\f') 
     { 

     } 

    } 

    return counter; 
} 

내가 몇 가지 변화를 시도,하지만 난 혼란 스러워요 곳 if 문의 중간 부분은 다음과 같습니다

내 기능입니다. 문자열의 단어 수를 어떻게 계산합니까? 문자열에 "Hello this is string"과 같은 공백이 여러 개있는 경우이 테스트를 테스트합니다.

+0

정규식을 사용할 수 없습니까? – danijar

+0

BTW :'||'대신에'&&'를 사용해야 할 것입니다. (또는 :'! ='를'=='로 변경하고 if {}와 else {} 본문을 바꿔 넣으십시오.) – wildplasser

답변

3

힌트는 숙제 일 뿐이므로

'단어'문자와 공백 사이의 전환 수를 계산하려고합니다. 마지막 문자를 기억하고 현재 문자와 비교해야합니다.

하나가 공백이고 다른 하나가 공백이 아니면 전환이 발생했습니다.

자세한 내용을 보려면 lastchar을 공백으로 초기화 한 다음 입력 한 모든 문자를 반복하십시오. lastchar이 공백이었고 현재 문자가 아닌 경우 단어 수를 늘리십시오.

각 루프 반복 끝에 현재 문자를 lastchar (으)로 복사하는 것을 잊지 마십시오. 단어 수를 0으로 초기화해야한다는 말을하지 않아도됩니다.

+0

고마워요! 그리고 나에게 대답을주지 않고 그것을 이해하게 해주는 것에 대해 당신에게 잘해라! lastchar이 공백이었고 현재의 문자가 아닌 곳을 썼을 때 당신은 나에게 답을 주었지만 단어 수를 늘리십시오. " –

+0

내 아버지는 선생님이라고 불리 웠고, 내 친구들 (그리고 순수한 지인들)은 저를 pax라고 부를 수 있습니다 :-) 대답에 관해서는, 당신은 여전히 ​​그것을 코딩해야합니다. 나는 단지 단어 수를 두 배로해야한다고 불평하는 사람이 돌아 오길 원하지 않았습니다. – paxdiablo

0

if 부분에있을 때는 단어 안에 있음을 의미합니다. 따라서이 단어를 inword으로 플래그를 지정하고 단어 (다른 부분이 될 수 있음)에서 inword (으)로 바뀌 었는지 확인할 수 있습니다.

0

이 빠른 제안되는 링크를 -이있을 수 있습니다 더 좋은 방법이지만, 나는 이것을 좋아한다.

먼저 단어가 무엇인지 "알기"바랍니다. 문자로만 이루어진 것으로 가정 해 봅시다. 구두점 또는 "공백"인 나머지는 구분 기호로 간주 될 수 있습니다.

그런 다음 "시스템"에는 1) 단어 완성, 2) 분리 기호 건너 뛰기의 두 가지 상태가 있습니다.

건너 뛰기 구분 기호를 자유롭게 실행하여 코드를 시작하십시오. 그런 다음 다음 구분 기호 나 전체 문자열의 끝까지 보관할 "단어 완성"상태로 들어갑니다 (이 경우 종료합니다). 그런 일이 발생하면 단어를 완성 했으므로 단어 카운터를 1 씩 증가시키고 "분리 기호 건너 뛰기"상태로 들어갑니다. 그리고 루프가 계속됩니다.

의사 C 형 번호 : 판독 CHAR는 [A-ZA-Z_ 예를 들어, 그렇지 않으면 거짓 인 경우

char *str; 

/* someone will assign str correctly */ 

word_count = 0; 
state = SKIPPING; 

for(c = *str; *str != '\0'; str++) 
{ 
    if (state == SKIPPING && can_be_part_of_a_word(c)) { 
     state = CONSUMING; 
     /* if you need to accumulate the letters, 
      here you have to push c somewhere */ 
    } 
    else if (state == SKIPPING) continue; // unneeded - just to show the logic 
    else if (state == CONSUMING && can_be_part_of_a_word(c)) { 
     /* continue accumulating pushing c somewhere 
      or, if you don't need, ... else if kept as placeholder */ 
    } 
    else if (state == CONSUMING) { 
     /* separator found while consuming a word: 
      the word ended. If you accumulated chars, you can ship 
      them out as "the word" */ 
     word_count++; 
     state = SKIPPING; 
    } 
} 
// if the state on exit is CONSUMING you need to increment word_count: 
// you can rearrange things to avoid this when the loop ends, 
// if you don't like it 
if (state == CONSUMING) { word_count++; /* plus ship out last word */ } 

함수 can_be_part_of_a_word true를 반환.

(피곤함에 대한 심한 실수를하지 않은 경우 작동 함)

관련 문제