단어 세기 > 문제은행



실력키우기 문자열

1516 : 단어 세기

제한시간: 1000 ms    메모리제한: 32 MB
해결횟수: 1439 회    시도횟수: 3572 회   



임의의 문장을 입력받아 각 단어별로 나눈 후에 단어들의 중복되는 개수를 구하는 프로그램을 작성하시오.

 

<처리조건>
(1) 입력된 스트링은 글자의 제한은 없다. 즉 공백이나 ', ' 등도 입력으로 들어 올 수 있다.
(2) 입력된 문장에서 각 단어사이의 구분은 공백으로 한다.
(3) 단어에는 공백을 제외한 단어들만이 포함된다.


임의의 문장을 입력받는다.(문장의 길이는 200 이하)
하나의 결과가 나온 후에도 계속 새로운 입력을 받다가, "END"가 입력되면 프로그램을 종료한다.
(문장의 개수를 30을 넘지 않는다.)


각 단어들의 발생 빈도를 사전순으로 출력한다.

I AM DOG DOG DOG DOG A AM I
I AM OLYMPIAD JUNGOL JUNGOL OLYMPIAD
END
A : 1
AM : 2
DOG : 4
I : 2
AM : 1
I : 1
JUNGOL : 2
OLYMPIAD : 2


[행단위로 문자열을 입력받기] 

[개행에 관하여]

[행단위로 입력받은 문자열을 단어로 분리하기]
int strlen(char*s, int i = 0){
	while (s[i]) i++;
	if (i && s[i - 1] == '\n') s[--i] = 0;
	if (i && s[i - 1] == '\r') s[--i] = 0;
	return i;
}

int strcmp(const char*s, const char*t){
	while (*s && *s == *t) s++, t++;
	return *s - *t;
}


void strcpy(char*dest, char*src){
	while (*dest++ = *src++);
}

char* strtok(char*ptr, char delim = ' '){
	/// 1. 단어의 시작위치 찾기 
	static char*p;                  /// 직전 탐색 위치를 유지하기 위하여 static 사용 
	if (ptr != NULL) p = ptr;        /// 새로운 문자열이 시작된 경우 
	while (*p && *p == delim) ++p;  /// 구분자가 아닌 첫 문자의 위치 찾기 
	/// trim leading or tailing or contiguous space 
	if (!*p) return NULL;          /// 입력 문자열 탐색이 끝남 

	/// 2. 단어의 종료위치 찾고, '\0'넣기 
	ptr = p;                        /// 단어의 시작위치를 ptr저장 
	while (*p && *p != delim) p++;  /// 현재 단어의 끝 찾기 
	if (*p) *p++ = 0;              /// 입력 문자열 끝이 아니라면 단어의 끝 표시 

	/// 3. 단어의 시작위치 반환 
	return ptr;
}


자료의 표현, 문자열

HancomEducation E-mail : hancomc@hotmail.com, comkiwer@naver.com Tel : 070-7163-5782 FAX : 031-388-0996 정올소개 이용약관 개인정보처리방침
경기도 안양시 동안구 호계동 1065-10 협성골드프라자 601호, 경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호
Copyright@2010-2015 jungol. All right reserved.