조회 수 980 추천 수 0 댓글 0

#include <stdio.h>
//#include <conio.h>
#include <string.h> 

char word[201];
char cut_word[201][201];
char end[4]={'E', 'N', 'D', '\0'};
int cnt[201]={0};

void set_word(void); //word 배열을 초기화하는 함수
void set_cut_word(int a); //cut_word 배열을 초기화하는 함수
 
int cut(void); //단어로 끊어내는 함수 
void line(int c); //알파벳 순으로 정렬하는 함수 
int what(int a, int b); //어떤 것이 앞 순서인지 판단하는 함수 
int main(void)
{
	int c=0, i, k;

	while(1)
	{
		scanf(" %[^\n]s", word);
		//gets(word);

		c=cut();

		if(c==-1) //END가 입력되면 종료 
		break;

		line(c);

		for(i=0; i<c; i++)
		{
	   		printf("%s : %d\n", cut_word[i], cnt[i]);
		}

		set_word();
		//strset(word, ' ');
		for(i=0; i<c; i++)
		{
			set_cut_word(i);
			//strset(cut_word[i], ' ');
			cnt[i]=0;
		}
	}
	 
	return 0;
}
void set_word(void)
{
	int i=0;
	while(word[i]!='\0')
	{
		word[i++]=' ';
	}
	word[i]=' ';
}
void set_cut_word(int a)
{
	int i=0;
	while(cut_word[a][i]!='\0')
	{
		cut_word[a][i++]=' ';
	}
	cut_word[a][i]=' ';
}
int cut(void)
{
	int i=0, j=0, k, a, b;
	char temp[50];

	for(k=0; ; k++)
	{
		if(word[k]==' ' || word[k]=='\0')
		{
			temp[j]='\0';

			if(strcmp(temp, end)==0) //END가 입력되면 종료 
				return -1;
		   	
			else if(i>0)
		   	{
		    	b=0;
		    	for(a=0; a<i; a++)
		    	{
		     		if(strcmp(temp, cut_word[a])==0) //앞에 같은 단어가 있을 경우 
		     		{
		      			cnt[a]++;
		      			b=1;
		     			break;
		     		}
		    	}
		    	if(b==0)
		  		{
		     		cnt[i]++;
		     		strcpy(cut_word[i++], temp);
		   		}
		  	}
		   	
		   	else
		   	{
		   		cnt[i]++;
		    	strcpy(cut_word[i++], temp);
		   	}
		   	
		   	if(word[k]=='\0') //입력된 문자열이 끝남 
		    	break;
		   
		   	j=0;
		   	k++;
		}

		if(word[k]!=' ')
	  		temp[j++]=word[k];
	}

	return i;
}
void line(int c)
{
	int i, j, aa, max;
	char temp[50];

	for(i=0; i<c-1; i++)
	{
		max=i;
		if(cut_word[i][0]!=' ')
		{
			for(j=i+1; j<c; j++)
			{
				if(what(max, j)==1) //앞 단어가 더 뒷 순서일 경우 
				{
		    		max=j;
		   		}
		  	}
		  	
		  	if(max!=i)
		  	{
			   	strcpy(temp, cut_word[i]);
			   	strcpy(cut_word[i], cut_word[max]);
			   	strcpy(cut_word[max], temp);
			   	
			   	aa=cnt[i];
			   	cnt[i]=cnt[max];
			   	cnt[max]=aa;
		  	}
	 	}
	  	//printf("----------------------------\n");
	}
}
int what(int a, int b)
{
	int i;

	for(i=0; ; i++)
	{
		if(cut_word[a][i]>cut_word[b][i] || cut_word[b][i]=='\0')
	  	{
	   		//printf("%s > %s \n", cut_word[a], cut_word[b]);
	   		return 1;
	  	}
	  	else if(cut_word[a][i]<cut_word[b][i] || cut_word[a][i]=='\0')
	  	{
	   		//printf("%s > %s \n", cut_word[b], cut_word[a]);
	   		return 0;
	  	}
	}
}



List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 글쓰기는 하루 5개, 댓글은 10개만 가능합니다. 좋은아빠되기 2019.02.15 298
공지 키보드 화살표값 출력 좋은아빠되기 2016.11.19 1075
공지 원하는 좌표에 값 출력하기 좋은아빠되기 2016.11.19 2391
공지 Python(파이썬) 학습 자료 PDF 1 file 좋은아빠되기 2014.12.10 10284
공지 dev C++ 텍스트 색상변경 WinApi사용(textcolor 대용) 좋은아빠되기 2014.06.07 4713
공지 DEV-C++ 기본 코드 좋은아빠되기 2013.06.19 8244
공지 무료 C++ 컴파일러(윈도우용) DEV-C++ 좋은아빠되기 2013.06.18 18950
공지 이클립스 C++ 설치 파일들 좋은아빠되기 2013.06.18 37839
190 정올 - 실력키우기 - 각자리수의 역과 합(1009) 조정미 2017.12.27 468
189 정올 - 실력키우기 - 각 자리수의 합(2812) 조정미 2017.12.27 663
188 정올 - 실력키우기 - 윤년(2085) 조정미 2017.12.30 226
» 정올 - 실력키우기 - 단어 세기(1516) 조정미 2018.01.02 980
186 정올 - 실력키우기 - 최대공약수와 최소공배수(1658) 조정미 2018.01.02 1311
185 정올 - 실력키우기 - 팩토리얼(1309) 조정미 2018.01.02 415
184 정올 - 실력키우기 - 선택정렬(1146) 조정미 2018.01.03 285
183 정올 - 실력키우기 - 삽입정렬(1158) 조정미 2018.01.03 289
182 정올 - 실력키우기 - 삽입정렬 횟수 세기(1814) 조정미 2018.01.03 328
181 정올 - 실력키우기 - 문자열 찾기(2514) 조정미 2018.01.03 241
180 정올 - 실력키우기 - 이진수(2814) 조정미 2018.01.03 201
179 정올 기초다지기 출력 자가진단2 정승준 2018.01.06 131
178 정올 기초다지기 출력 자가진단6 정승준 2018.01.06 136
177 정올 - 실력키우기 - 줄자접기(1112) 조정미 2018.01.06 360
176 정올 - 실력키우기 - 문자열변환(2518) 조정미 2018.01.06 185
175 정올 기초다지기 출력 자기진단7 정승준 2018.01.06 140
174 정올 - 실력키우기 - 단어집합(하)(1535) 조정미 2018.01.06 505
173 정올 - 실력키우기 - 이진탐색(1295) 조정미 2018.01.06 216
172 정올 - 실력키우기 - 쇠막대기(2858) 조정미 2018.01.20 754
171 정올 - 실력키우기 - 타일교체(2810) 조정미 2018.01.20 172
Board Pagination Prev 1 ... 12 13 14 15 16 17 18 19 20 21 ... 26 Next
/ 26