C언어 기초: 문자열 예제

김영채 (Kevin)·2020년 4월 26일
1

C언어

목록 보기
20/23
post-thumbnail

이번 주에는 문자열(string)에 대해서 배웠다.
C언어는 다른 언어 (자바, 파이썬)과는 달리 문자열을 처리하는 방식이 다르단다. 특히, 파이썬에서는 없는 strcpy(), strcmp() 등의 함수가 처음에 꽤 헷갈렸다.

특히, 문자열을 처리할 때 한 문자열에서 단어를 분리해야 하는 경우가 많은데, 이럴 때 ptoken 변수를 사용하는 법을 배웠다.

우선 첫 번째 문제부터 보자:

왼쪽이 input, 오른쪽이 output이다.

왼쪽과 같이 char a[] = "cars": 라는 입력이 들어왔을 때, 각 단어의 순서를 reverse해서 출력해야 한다.

우선 대충 생각나는대로 끄적여봤다.

이 문제에서 중요한 것은, 일단 문자열 안에 있는 단어를 어떤 기준으로 나눌 것이냐가 중요하다.

단어 하나 하나를 분리해줘야 하기 때문에, 아래와 같이 코딩을 해줘야 한다.

char *delimiter=" ";

" " 와 같이 큰 따옴표에 공백을 넣은 이유는, 공백을 기준으로 단어를 나눌 것이기 때문이다. 즉, 예를 들어 "Hello World This is Velog" 이라는 input이 들어오면 "Hello", "World", "This", "is", "Velog" 이런 식으로 분리를 해주는 역할이 delimiter 변수라는 것이다.

그 다음은 strtok()이라는 함수를 배웠는데, 해당 함수를 쓰면 원하는 변수 (ptoken)에 문자열에서 분리된 단어를 한 번씩 저장이 가능하다.

그럼 최종 코드를 보도록 하자:

int main(){

    char s[60];
    gets(s);
    int i;
    char *delimiter=" ";
    char *ptoken=strtok(s,delimiter);

    while(ptoken!=NULL){

        for(i=strlen(ptoken)-1; i>=0; i--)
        {
             printf("%c", ptoken[i]);
        }
        printf(" ");

        ptoken=strtok(NULL, delimiter);
    }

    return 0;
}

profile
맛있는 iOS 프로그래밍

0개의 댓글