ABOUT ME

-

Today
-
Yesterday
-
Total
-
s0ye0ve
  • [C/C++] 전체 배열의 길이, 문자가 들어 있는 배열의 길이 구하기
    Programming/C언어 2022-11-29
    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

    댓글

Copyright 2020. s0ye0ve all rights reserved.

Designed by Tistory.