-
728x90
문자열로 쭉 배열에 입력받고 나서 배열의 길이를 구해야 할 때 유용하게 쓸 수 있다.
- 배열의 전체 길이가 필요할 때 : sizeof()
- 배열에 임의로 들어간 문자열의 길이가 필요할 때 : strlen()
sizeof는 str[] 처럼 배열의 길이를 배열을 선언할 때부터 정하지 않아서 나중에 배열의 전체 길이가 필요하면 쓸 수 있다.
strlen은 백준에서 유용하게 쓰이는데, 임의의 문자열이 무작위로 들어가는 상황에서 문자열의 길이가 필요할 때 쓴다.
백준에서는 1에서 20자리의 문자열이라고 길이를 명시해두는 경우가 많았어서 str[20] 으로 정해두고 for문에서 문자열 인덱스를 하나씩 늘려갈 때 어디까지 반복하라고 끝을 정할 때 유용하게 썼다.
주의 : strlen 함수를 사용하려면 코드 맨 위에 헤더파일 #include <string.h>를 선언해야 한다.
예제
#include <stdio.h> #include <string.h> int main() { char str[] = {1,2,3}; //배열의 길이가 정해지지 않았다 printf("sizeof : %d\n", sizeof(str)); printf("strlen : %d\n\n", strlen(str)); str[3] = 4; //다음 인덱스에 숫자 추가 str[4] = 5; printf("sizeof : %d\n", sizeof(str)); printf("strlen : %d\n", strlen(str)); for(int i=0; i<5; i++) printf("%d", str[i]); return 0; }
결과
sizeof : 3 strlen : 3 sizeof : 3 strlen : 5 12345
이런 식으로 sizeof에서는 원래 선언할 때 넣어준 1,2,3 이 세 개를 길이로 인식한 것을 볼 수 있고, strlen은 인덱스를 더 추가해서 늘어난 개수까지 세는 것을 알 수 있다.
활용한 문제
- 백준 - 2675번 문자열 반복
#include <stdio.h> #include <string.h> int main() { char str[20]; //배열의 길이가 정해져 있다 int test; int num; scanf("%d\n", &test); int i = 0; for(i=0; i < test; i++) { scanf("%d %s", &num, str); int j = 0; int k = 0; for(k=0; k < strlen(str); k++) { //여기서 사용 for(j=0; j < num; j++) printf("%c", str[k]); } printf("\n"); } return 0; }
이 코드에서는 str[20] 처럼 배열의 개수는 처음부터 정해져 있지만 입력값이 무작위 길이의 입력이라 문자열의 길이를 알아야지만 문제를 풀 수 있었다. 따라서 strlen을 사용하여 문자열 길이를 구하고, 그 수만큼 반복해 문자열 인덱스를 처음부터 마지막 문자까지 차례대로 방문할 수 있게 했다.
※ 혼자 공부하면서 적는 거라서 다소 부정확한 내용이 있을 수 있습니다. 틀린 내용에 대한 지적은 언제든지 감사하게 받을테니 댓글로 남겨주세요!
728x90'Programming > C언어' 카테고리의 다른 글
[C/C++] 숫자 한 번에 입력받아서 배열에 하나씩 할당하기 (0) 2020.12.29