Game !

 

 

 

사용자로부터 10개 이하의 숫자를 입력받고,

사전 순서대로 출력하여 보자.

 

 

1. int n 으로 입력할 단어의 개수를 받는다.

2. 단어를 n 수 만큼 입력받는다.

3. Sort 함수를 만들어 정렬을 한 다음, 출력한다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
 
void main()
{
    int n; //
 
    /* 왜 2차원 배열인지는 아래에 */
    char str[10][20];
    
    
    printf("입력할 단어 개수?(최대10개) : ");
    scanf_s("%d", n);
 
    for(int i=0; i<n; i++)
    {
        printf("단어 입력 : ");
        scanf_s("%s", str[i]);
    }
 
    Sort(str, n);
 
    for (int i = 0; i < n; i++)    
        printf("%s\n", str[i]);
    
}
 
void Sort(char (*str)[10], int n)
{
    int min;
    char temp[20];
 
    for(int i=0; i<n-1; i++)
    {
        min = i;
        for(int k= i+1; k<n; k++)
        {
            /* cmp에 대한 조건식 아래에 */
            if(strcmp(str[min], str[k]) > 0)
            {
                min = k;
            }
        }
        strcpy(temp, str[i]);
        strcpy(str[i], str[min]);
        strcpy(str[min], temp);
    }
}
 

 

 

정렬하는 이유는

for (int i = 0; i < n; i++)    

 

        printf("%s\n", str[i]);

이 부분에서 순서대로 출력하기 위해서 입니다.

 

 

 

char str[10][20] => 2차원 배열로 만든 이유

 

[10]부분이 단어의 개수를 입력받습니다

 

배열은 포인터다! 라는것을 기억한다면,

10개의 방은 포인터 형이고 이 포인터는 다시 [20] 의 배열을 각각 가리킵니다.

 

그래서 단어를 입력받을 때 str[i] 가 [20] 개의 각각의 방에 문자열을 저장합니다.

 

 

strcmp(str[min], str[k]) > 0 => strcmp의 조건식을 > 0 으로 한 이유

 

strcmp의 기본형 : 

char * strcmp( const char *s1, const char *s2);

 

strcmp == 0 결과 값이면 s1 = s2
strcmp > 0 결과 값이면 s1 > s2
strcmp < 0 결과 값이면 s1 < s2