본문 바로가기
컴퓨터/C, C++

[C언어] 단어 개수를 세는 프로그램, 공백으로 단어 구별

by 도도새 도 2021. 12. 8.

단어 개수를 구하는 프로그램

 

 오늘은 공백으로 구별되는 단어 개수를 구하는 프로그램을 작성, 정리하겠습니다. 예를 들어 abc abc abc를 입력받으면 3을 출력해야합니다. 단어는 단지 공백으로만 구별하도록 작성합니다. 이외의 특수문자는 모두 문자와 동일하게 취급합니다.

즉, "!!! !!! !!!" 역시 3을 출력합니다.

 

단어 개수 코드 1(for문)

 

 저는 아직 코딩이 미숙한 탓인지, 왠만하면 반복문은 while이 아닌 for문을 사용하는 경향이 있습니다. 후에 두 가지 모두 능숙하게 다룰 필요가 있다고 느껴서 오늘은 for문을 이용한 프로그램 구현과 while문을 이용한 프로그램 구현을 모두 해봤습니다. 

간략한 설명

9번쨰 줄 : scanf를 이용해 문자열을 받으려면 scanf("%s", str);을 이용하면 됩니다. 다만 배열은 그 자체가 주소를 가리키므로 &연산자를 붙여 주소에 접근시켜 줄 필요 없습니다.

 다만 이 방법을 사용하면 공백을 문자열에 저장할 수 없습니다. 그래서 공백을 포함해 배열에 문자를 저장하려면 "%[^\n]s"를 사용합니다.

 

14번쨰 줄 : 배열의 0번째 값부터 마지막 값까지 반복 진행합니다.

 

15번째 ~ 17번째 줄 : 만약 현재 인덱스의 배열 값이 공백이 아니라면, 한 단어로 처리합니다.

 단어의 시작 값(현재 인덱스 배열값)에서 공백을 만날 때까지 진행하여, index값을 검사하기 시작한 단어의 마지막 값의 인덱스로 지정하고, 단어 개수를 의미하는 n_word를 1늘립니다.

 

19번째 줄 : 만약 현재 인덱스의 배열 값이 공백이라면, for문을 계속 진행합니다.

/*공백으로 구분되는 단어 갯수 출력 */

#include <stdio.h> 
#include <string.h>
int main(void){
	char str[1000];
	int n_word = 0;
	
	scanf("%[^\n]s", str);//공백 포기함하여 입력받 
	
	int index = 0;
	int i;
	
	for(index = 0; str[index]!='\0'; index++){
		if(str[index] != ' '){
			for(i = index; str[i]!=' '&&str[i]!=NULL;i++) index = i;
			n_word++;
		}
		else continue;
	}
 
	printf("%d\n", n_word);
	
	return 0;
}

출력 결과

프로그램 출력 결과

앞쪽을 공백으로 시작했습니다. 공백으로 구별되는 단어 개수 7을 출력하는 것을 볼 수 있습니다.

단어 개수 코드2(while문)

 

 두 번째는 와일문입니다. 사실상 앞서 for문으로 구현 한 것과 차이가 없습니다.

 

간략한 설명

14번째 줄 : 인덱스의 배열 값이 널이 아닌 동안 진행(즉 배열 끝까지 진행)

 

15번째 16번째 줄 : 만약 배열 값이 공백이 아니라면, 인덱스값을 해당 단어의 끝 값의 인덱스로 초기화

 

19번째, 20번째 줄 : 현재 인덱스는 단어의 마지막 값을 가리키고 있으므로 index++로 단어를 벗어남(그렇지 않을 경우 공백이 아님을 나타내는 if문에 걸리고, 그 내부 for문이 무한 반복)

 n_word를 1 늘려줌

 

23번째 줄 : 공백인 경우 index값만 1 늘림

/*공백으로 구분되는 단어 갯수 출력 */

#include <stdio.h> 

int main(void){
	char str[1000];
	int n_word = 0;
	
	scanf("%[^\n]s", str);//공백 포기함하여 입력받 
	
	int index = 0;
	int i;
	
	while(str[index]!=NULL){ 
		if(str[index] != ' '){  
			for(int i = index;str[i]!=32&&str[i]!=NULL;i++){ 
				index = i;  
			} //단어 한 덩어리 처리 
			n_word++;
			index++;
		}
		else
			index++;
	}

	printf("%d\n", n_word);
	
	return 0;
}

이상으로 공백으로 구분되는 단어의 개수를 세는 C언어 프로그램을 작성하고, 정리해봤습니다. 공부를 정리하고 나아가는 블로그입니다. 오류나 지적사항 발견시 댓글 남겨주시길 바랍니다.

댓글