본문 바로가기

프로그래밍 문제/정올

188 : 문자열1 - 형성평가7

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <string.h>
 
#pragma warning (disable:4996)
 
// 프로그램 종료 트리거
int trigger = 0;
 
// 공백 위치 탐색
int search_blank(char* arr, int start) {
 
    int end;
 
    for (int i = start; ; i++) {
        if (arr[i] == ' ') {            // 해당 인덱스가 공백이라면
            end = i;                    // 해당 인덱스 반환
            break;
        }
        else if (arr[i] == '\0') {      // 해당 인덱스가 NUL이라면(문자열의 끝)
            end = i;                    // 해당 인덱스 반환
            trigger = 1;                // 이제 그만 출력해야 하므로 트리거 활성화
            break;
 
        }
    }
 
    return end;
}
 
// 화면에 출력
void print(char* stringint blank_s, int blank_e, int count)
{
    printf("%d. ", count);
    for (int i = blank_s; i < blank_e; i++)        // 공백과 공백 사이의 문자열 출력
        printf("%c"string[i]);
    printf("\n");
}
 
int main()
{
    char string[100];
    int blank_s = 0, blank_e;
    int count = 1;
 
    fgets(string100, stdin);
    blank_e = search_blank(string0);              // 초기 공백 탐색은 blank_s에 0을 전달
 
    // 문자열을 계속 출력하기 위한 무한루프
    while (1) {
        print(string, blank_s, blank_e, count);     // 일단 출력하고
 
        if (trigger == 1)                           // 종료 검사
            break;
 
        count++;                                    // 다음 단어 숫자 증가
        blank_s = blank_e + 1;                      // 구 공백 업데이트
        blank_e = search_blank(string, blank_s);    // 신 공백 업데이트
 
        
    }
 
 
 
 
 
 
 
    return 0;
}
cs

 이 문제는 약간 어려웠다.

공백이 시작하면 이전까지의 문자열을 출력하면 되는데,

알고리즘은 머릿속에서 빠르게 떠올랐지만,

이게 코드로의 구현이 조금 어려웠다.