Game !



문자열을 입력받고, 문자의 빈도수를 계산하여 출력해보자!




1. 문자열을 입력받는다 (스페이스바포함)

2. a~z 까지 문자를 저장한다

3. 1개씩 문자를 비교하여 문자와 같아면, 값을 1씩 증가시킨다




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
#include <stdio.h>
#include <string.h>
 
void main()
{
    char str[100]; //입력받는 문자열
    char alpa[30]; //문자 a~z 저장
    int temp[30= {0, }; //빈도수 저장 int!!
    int count = 0;
 
    char* Return;
    
    for(int i=0; i<25++)
        apla[i] = i+97;
 
    fgets(str, strlen(str), stdio);
 
    /* 개행삭제 */
    if( (Return = strchr(str, '\n')) != NULL)
        *Return = '\0';
 
    for(int i=0; i<25; i++) //알파벳 for문
    {
        for(int k=0; k<strlen(str); k++) //문자열 for문
        {
            if(str[k] == alpa[i])
                temp[i] = ++count;
        }
        count = 0;
    }
 
    for (i = 0; i < 25; i++)
        printf("%c  : %d\n", alpa[i], temp[i]);
}

cs




영어는 26개 까지 있지만 넉넉하게 30으로 잡았습니다.

alpa 배열과 temp 배열의 개수가 똑같게 잡았습니다

영어 문자에 따라 빈도수를 저장하기 때문입니다.



1.


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

        apla[i] = i + 97;


이 부분을 보시면,

i 를 0 부터 시작하게 해서 문자를 순서대로 저장합니다.

cf. 소문자 a 는 아스키코드표를 참조하시면 97 부터 시작합니다


0 + 97 = 97 'a'

1 + 97 = 98 'b'

2 + 97 = 99 'c'

.

.



2. 개행 삭제


 if( (Return = strchr(str, '\n')) != NULL)

        *Return = '\0';


출처 : http://ra2kstar.tistory.com/173


strchr 은 매개변수 str을 참조하여 두번째 매개변수 '\n' 이 들어가있는 곳을 찾아서 반환합니다.

만약 없다면 NULL 을 반환하므로, 맨 마지막 '\n' 을 Return 에 저장합니다.


그리고 개행 부분에는 NULL을 넣어줍니다.


이 문장은 str[strlen(str) - 1] = '\0' 과 같습니다.