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* string, int 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(string, 100, stdin);
blank_e = search_blank(string, 0); // 초기 공백 탐색은 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 |
이 문제는 약간 어려웠다.
공백이 시작하면 이전까지의 문자열을 출력하면 되는데,
알고리즘은 머릿속에서 빠르게 떠올랐지만,
이게 코드로의 구현이 조금 어려웠다.