[C언어] 문자열 길이 구하기

in #kr-dev5 years ago (edited)

[C언어] 문자열 길이 구하기


C언어에서 문자열에서 자주 사용하는 것이 문자열의 길이를 사용합니다. 입력 문자열이 가변적이기 때문에 문자열을 코딩에서 다루기 위해서는 문자열의 길이를 알고 있으면 좀 더 쉽게 코딩을 할 수 있습니다. 참고로 C언어나 다른 언어에서 문자열 길이 구할 때 간단히 언어에서 제공되는 함수를 사용하여 길이를 구할 수 있지만 C언어를 배우면 코딩을 하는 법을 배우기 때문에 문자열 길이를 구하는 함수를 사용하기도 하지만 직접 문자열 길이를 구하는 로직을 짜보게 해서 코딩하는 법을 배우게 하는 경우가 많습니다. 오늘 주제는 문자열 길이를 구하는 코딩를 해보는 걸로 간단히 다루겠습니다.

1. 문자열 길이 구하기 기본 함수


string.h 파일에 strlen()함수가 제공됩니다. 이 함수를 사용하면 해당 문자열의 길이를 구할 수 있습니다.

[코딩]

#include <stdio.h>
#include <string.h>

int main(void) {
    char *str1 = "SteemIt";
    
    printf("%d\n", strlen(str1));  
    return 0;
}

[결과]
![a1.jpg](

이렇게 "SteemIt" 문자열 길이가 7이라는 결과를 간단히 얻을 수 있습니다. 이렇게 사용하면 C언어 입문자의 경우 코딩을 연습하는 의미가 없어집니다. 이 7이라는 결과를 얻기 위해서 직접 로직을 짜봐야 합니다.

그러면 직접 7의 결과을 얻어 볼까요.

2. 문자열 길이 구하는 코딩


for문을 이용한 문자열 길이 구해 봅시다.

    for(int i=0;str1[i];i++){
        len+=1;
    }

str1에 들어 있는 문자열이 for문으로 str1[i]로 문자열의 끝 널문자까지 갔을 때 for문을 빠져 나오게 되는데 그때까지 len변수는 +1씩 증가하게 해서 문자열의 길이를 구할 수 있습니다.

while문을 이용한 문자열 길이를 구해 봅시다.

    while(str1[len]){
        len++;
    }

이 경우도 while문이 뿐 for문과 별반 차이가 없죠. 그런데 위와 아래는 len 변수를 1씩 증가하는데 표현이 약간 다르죠. 같은 의미 다른 표현을 참고하라는 의미로 이렇게 했네요. 코딩은 정형화 된 코딩은 없습니다. 자신의 스타일로 편하게 코딩하되 가독성을 높이고 자신이 짠 코딩이 남들도 보기 편하게 가독성 있게 코딩하는게 가장 이상적인 코딩이지요. 그래서 C언어 책을 사서 공부할 때 어떤 책은 어렵게 느껴지고 어떤 책은 쉽게 느껴지는 책들이 있는데 그 경우는 그 책의 코딩이 얼마나 가독성 높게 코딩 되어 있느냐의 차이이지요.

이제 이게 정상적으로 문자열 길이를 구해지는지 살펴볼까요.

종합해 보면,

#include <stdio.h>

int main(void) {
    char *str1 = "SteemIt";    
    int i=0;
    int len=0;
    
    //첫번째 문자열 길이 구하기
    for(int i=0;str1[i];i++){
        len+=1;
    }
    printf("첫번째 문자열 길이 : %d \n",len);
    
    //두번째 문자열 길이 구하기
    len=0;
    while(str1[len]){
        len++;
    }
    printf("두번째 문자열 길이 : %d \n",len);
    
    return 0;
}

[결과]
a2.jpg

정상적으로 문자열 길이가 나오네요.

마무리


오늘은 기본 제공 함수를 사용하여 문자열 길이를 짜보기도 하고 직접 로직을 짜서 문자열 길이를 구해도 보았습니다. C언어 입문자문들을 쉽게 제공되는 함수를 사용하는 것도 능력이지만 그 전에 그 함수를 직접 로직으로 짜서 구현해 보는 것도 나중에 많은 도움이 됩니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

for(int i=0;str1[i];i++){
len+=1;
}

여기서 보통 저는 최종이 i<9 이런걸 썼는데요.
str1[i]; 이게 지금 무슨 뜻인지 모르겠습니다.

원래 저자리에 문자열 길이 숫자를 넣는 경우가 많은데 이 표현은 약식 표현 같은 걸로 보시면 돼요.
str1[i]은 문자 값을 가지고 있으면 그 값이 참이 되고 가지고 있지 않으면 거짓이 되어 루프문을 빠져 나오게 되지요.
조건문에서 어떤 값을 가지고 있으면 무조건 참이고 없으면 거짓인 것 처럼요.

아, 값이 있을 때까지 참이니깐, 실행되는 거네요. 오호. 그러면 딱 길이가 나오겠네요. 근데 마지막엔 null 값이 들어있어서 1빼준다고 하던데, 여기는 null값이 없나요? ㆍㅅㆍ 그거랑 무슨 차이인가요?

그건 배열로 한번 해당 위치를 if문 조건문으로 찍어보세요. 그래야 그 의미를 할 수 있어요.
'\0' 자체가 거짓입니다. 문자는 아스키코드값이잖아요. 그리고 널 문자는 문장의 끝을 지칭하고요.
그리고 문자열의 길이에서 -1을 빼준다는 의미는 문자열 길이값은 마지막 문자인 널문자까지 포함한 글자의 길이를 의미합니다. 그래서 코딩의 표현에서 마지막 널문자까지 루프를 돌릴 필요가 없기 때문에 1를 빼주는 코딩을 할 수 있고요.

그러면 이렇게 읽어도 마지막엔 널문자가 한 번은 읽히겠네요? ㅇ_ㅇ str[i-1] 이렇게 해도 똑같나요?

그렇게 하면 i는 어떤 값으로 증가하든 감소하든 하기 때문에 거기에 -1을 하면 안돼요. i값은 가변적이기 때문에 알수 없는 수에 -1을 하면은 안되겠지요.
위 식에서 보면 i가 0부터 시작하기 때문에 0-1은 str[-1]이 되겠죠.

아하, ㅇ_ㅇ 그렇군요. 그래서 에러가 났었군요. ㅎㅎㅎㅎㅎ 우왕 ㅎㅎㅎ

곰돌이가 @urobotics님의 소중한 댓글에 $0.017을 보팅해서 $0.006을 살려드리고 가요. 곰돌이가 지금까지 총 3534번 $41.982을 보팅해서 $43.983을 구했습니다. @gomdory 곰도뤼~

곰돌이 감사합니다. ^^ ㅎㅎㅎㅎ

짱짱맨 호출에 응답하였습니다.

방문해주셔서 감사합니다.

문자 길이도 계산해주네요. 신기합니다. 이런게 그 문자에서 mms 넘어가는 길이를 카운트할때 적용이 되어있겠죠?

Coin Marketplace

STEEM 0.15
TRX 0.12
JST 0.026
BTC 56095.11
ETH 2533.38
USDT 1.00
SBD 2.23