본문 바로가기

C언어_VisualStudio

문자열

오늘은 문자열에 대해 간단하게 정리하려고 한다.  :-)

 

 문자는 프로그램 안에 숫자로 저장한다. 이때 대응되는 숫자는 ASCII코드를 참고한다.

 

이런 문자들을 배열에 저장하면 문자열이다.

 

 문자 1개는 '작은 따옴표'로 값을 표시하고, 문자열은 "큰 따옴표"로 표시한다.

 

문자열의 끝을 표시하기 위해 '\0'이나 'NULL'문자를 사용한다. 

 

예를 들어 hello라는 문자를 문자열에 저장한다고 하면,

 

#include <stdio.h>

int main(void){
    char str[6]="hello";
    return 0;
}

 

str문자열 안에는 다음과 같이 저장된다.

문자열 저장

 

따라서 문자열을 선언할 때는 꼭 '\0'가 들어갈 공간까지 생각해주자.

 

참고) 한글의 경우 한 글자에 2byte이므로 문자열 크기를 생각할 때 넉넉하게 두배로 생각하면 된다. 

 

 

만약에 NULL문자가 여러 번 나온다고 해도 문자열의 앞 순서부터 읽을 때 맨 처음 나온 곳까지 읽어진다. 

 

 

크기를 미리 정하기 어렵다면 크기를 생략하여 문자열을 초기화해도 된다.

#include <stdio.h>
// 문자열 크기 생략하여 초기화
int main(void){
    char str[]="hello";
    return 0;
}

 

문자열 출력

 

문자열을 출력할 때는 형식지정자 %s를 사용하고 문자열의 이름을 적어주면 된다. (문자의 경우 %c이다.)

 

printf를 이용하여 문자열을 출력해보자. 문자열의 처음부터 NULL문자를 만나기 전까지의 문자들이 출력된다.

 

#include <stdio.h>
// 문자열 출력
int main(void){
    char str[]="hello";
    printf("%s", str);
    return 0;
}

문자열 저장
문자열 출력

 

이번에는 str문자열에 입력해보자. printf함수와 같이 형식 지정자 %s를 사용하면 된다.

단, 여태 다른 정수 같은 것을 입력받을 때와는 달리 문자열 앞에 &를 사용하지 않는다. 할당받은 주소에 바로바로 저장되기 때문이다.

 

#pragma warning(disable:4996)	// scanf 오류 방지
#include <stdio.h>
// 문자열 입력&출력
int main(void) {
    char str[100];
    printf("문자열 입력: ");
    scanf("%s", str);
    printf("%s을 입력", str);
    return 0;
}

문자열 입출력

 

문자열 사용 시 주의할 것

 

문자열은 다른 것 (정수형 변수, 실수형 변수 등등)과 달리 주의할 것이 몇몇 있다.

 

1. scanf 함수 사용시 &를 사용하지 않는다.

 

    바로 위에서 나타냈으니 패스!

 

 

2. 대입이 안된다. 

 

    대입 연산자인 '='를 사용하여 대입이 안된다. 말하자면 다음과 같이 쓰면 오류가 난다는 것이다.

 

str = "hello";

 

    문자열에 대입과 같이 해주고 싶다면 strcpy함수를 사용한다. 이 함수를 사용하려면 string 헤더 파일을 불러와야 한다. 

 

#include <stdio.h>
#include <string.h>
//strcpy
int main(void) {
    char str[10];
    strcpy(str, "hello");	//strcpy(복사할 곳, 복사할 내용);
    return 0;
}

 

3. 비교 연산자도 사용할 수 없다.

 

    예를 들어 두 문자열이 같다는 것을 표현하고 싶을 때 다른 변수들처럼 '=='를 사용할 수 없다는 것이다.

 

    이때는 strcmp를 이용한다. 

 

#include <stdio.h>
#include <string.h>
//strcmp
int main(void) {
    char str1[] = "hello", str2[] = "hello";
    if (strcmp(str1, str2)==0) printf("두 문자열은 같습니다.");
    else printf("두 문자열은 다릅니다.");
    //strcmp 두 문자열이 같으면 0을 반환, 다르면 0이 아닌 다른 값을 반환
    return 0;
}

    str1과 str2가 동일하면 0을 반환,


    str1 str2순으로 사전 순서(오름차순)이면 음수를 반환,

 

    내림차순이면 양수를 반환한다.

 

 

4. 문자열을 이어 붙일 때도 문자끼리 '+'연산자를 사용하여 더 할 때와 달리 표준 함수인 strcat를 사용해야 한다. 

 

문자열 표준 함수

C에서는 문자열 처리하기 위한 표준 함수가 제공되고 있으며 이를 활용하여 코딩하면 된다.

 

다음은 자주 사용하는 문자열 표준 함수들이다.

 

문자열 표준 함수를 사용하기 위해서는 #include <string.h>를 해주어야 한다.

 

  • strcpy : 문자열을 복사하기 위한 목적으로 사용
  • strcmp : 두 문자열을 비교하기 위한 목적으로 사용
  • strcat : 두 문자열을 이어 붙이기 위해 사용
  • strlen : 문자열의 길이를 계산하기 위해 사용 ("hello"의 길이는 5)