https://www.acmicpc.net/problem/10798
5개의 문자열이 주어지면 각 문자열의 i번째 낱말로 세로 단어를 만들고 이를 이어붙여 출력하는 문제다.
C언어는 문자열의 끝이 NULL로 끝난다.
각 문자열의 길이가 달라 어떤 문자열의 i번째 낱말이 NULL일 수 있다.
이 경우 무시하고 넘어간다.
i번째 낱말이 NULL이 아니면 verticalWord[t]에 넣고 t를 하나 증가시켜준다.
이를 출력해야하므로 마지막에는 NULL을 저장한다.
각 문자열을 저장할 때 배열에는 가비지 값이 있었다.
만약 이 길이를 다 채우지 못하는 문자열을 받고 세로 단어를 만들 때
가비지 값은 NULL이 아니기 때문에 가비지 값도 세로단어의 낱말로 취급된다.
그래서 배열을 할당할 당시 배열을 NULL로 초기화해야 한다.
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 | #include<stdio.h> #define WORD_NUMS 5 #define MAX_LENGTH 15 int main() { char word[WORD_NUMS][MAX_LENGTH + 1] = {NULL}; char verticalWord[WORD_NUMS+1]; int t = 0; for (int i = 0; i < WORD_NUMS;i++) { scanf("%s",word[i]); } for (int i = 0; i < MAX_LENGTH;i++) { for (int j = 0; j < WORD_NUMS; j++) { if(word[j][i]!=NULL) verticalWord[t++] = word[j][i]; } verticalWord[t] = NULL; printf("%s",verticalWord); t = 0; } printf("\n"); system("pause"); return 0; } | cs |
'백준' 카테고리의 다른 글
2563)색종이 (0) | 2019.02.02 |
---|---|
1789)수들의 합 (0) | 2019.02.02 |
6376)e 계산 (0) | 2019.02.02 |
4659)비밀번호 발음하기 (0) | 2019.02.02 |
3460)이진수 (0) | 2019.02.01 |