[C언어] 9. 문자와 문자열
문자와 문자열
컴퓨터에서 다루는 글자 하나하나를 문자 (Character)
라고 합니다.
문자열 (String)
은 문자들의 집합으로, 문자의 배열을 칭합니다.
보통 문자를 표현하기 위해서는 따옴표('')
를 활용하고, 문자열은 쌍 따옴표("")
를 활용합니다.
문자 - 단일 문자
문자열 둘 이상의 문자
Character type
char ch = 'a';
글자를 저장하기 위한 데이터 타입 입니다.
글자를 저장하기 때문에, 따옴표('')
로 저장할 글자 하나를 감싸 초기화해야 합니다.
한글자 이상 입력시 에러
char
데이터 타입은 한 글자만 저장이 가능합니다.
char x = 'abc'; // error
abc
는 따옴표로 묶여 있어 문자라 착각할 수 있지만, 3글자로 쌍따옴표로 묶는것이 올바른 표현 입니다.
char num = '10';
10
은 1과 0을 합친 문자열 입니다.
10을 표현하기 위해서는 '1'
과 '0'
을 활용해야 합니다.
아스키코드 (ASCII code)
컴퓨터는 문자를 문자로 기억하지 않습니다.
문자를 저장하기 위해 숫자를 기억하고, 숫자를 정해놓은 글자로 대응하는 값을 표현하는 방식입니다.
아스키코드ASCII (American Standard Code for Information Interchange)는 0 ~ 127
까지의 대응되는 값을 표현할 수 있는 표준 코드 체계 입니다.
출처 - https://developer-p.tistory.com/72
char c = 3;
char c = '3';
for(int i = 66 ; i < 72 ; i++) {
printf("%c", i);
}
아스키코드를 활용하면 알파벳과 관련한 코드를 유연하게 작성할 수 있습니다.
아스키코드는 대문자(65 ~ 90) - 소문자(97 ~ 122)순으로 되어있습니다.
예제
char scan;
scanf("%c", &scan);
if (scan > 'a') {
scan -= 'a';
}
printf("%c\n", scan);
문자를 입력했을때, 대문자로 변경하여 출력하는 예제입니다. 컴퓨터도 문자 자체를 숫자로 인식하기 때문에, 연산이 가능합니다.
문자열
char str[] = "abcd";
다른 프로그래밍 언어와는 다르게, c언어는 기본적으로 String
데이터 타입을 지원하지 않습니다.
때문에, 문자열을 표현하기 위해 char
의 배열로 저장합니다.
배열의 마지막 인덱스에 ‘\0’(null)이 자동으로 저장된다
문자열을 다룰때 주의할 점입니다.
자동적으로 문자열의 끝에 '\0'
문자가 들어가고, 컴퓨터가 이 문자를 인식해야 문자열의 끝을 알 수 있습니다.
때문에, 널 문자 뒤에 문자열이 있어도 컴퓨터는 인식하지 않습니다.
문자열의 배열
char str[2][10] = {"abc", "def"};
문자열이 문자의 배열이기 때문에, 2차 배열로 문자열의 배열을 활용할 수 있습니다.
string.h의 함수
#include<stdio.h>
#include<string.h>
int main(){
...
return 0;
}
include<string.h>
헤더파일을 활용하면 문자열에 관련된 많은 함수를 활용할 수 있습니다.
strcpy(s1, s2); // s1 = s2
s1
문자열을 s2
의 문자열로 초기화하는 함수입니다.
이후 공부할 포인터 관련 개념이지만, 배열을 주소를 변경할 수 없기 때문에, 위 함수를 활용하여 초기화 할 수 있습니다.
strcat(s1, s2); // s1 += s2
s1
문자열 뒤에 s2
문자열을 추가하는 함수입니다.
strlen(s1); // 문자열의 길이 (null 문자 제외)
int length = strlen(s1);
문자열의 길이를 알려주는 함수입니다.
함수의 return
방식에 대하여는 이후에 설명하겠지만, 변수처럼 활용할 수 있다고 알고 있으시면 되겠습니다.
strcmp(s1, s2); // (s1 == s2)
문자열을 비교하는 함수 입니다.
이 함수는 상황에 따라 3가지를 반환(return) 합니다.
> == 0 s1과 s2의 내용이 동일한 string
> > 0 /* s1 > s2
> < 0 /* s1 < s2
이 함수 이외에도 string.h
에는 활용할 수 있는 많은 함수가 있습니다.
더 다양한 함수는 여기에서 확인할 수 있습니다.
문자열 입력
char str[100];
scanf("%s", str);
표준 입출력에서 입력을 위해서 &
기호를 변수 앞에 작성했어야 했습니다.
하지만, 문자열은 배열이기 때문에 변수 자체가 해당 주소를 표시하고 있기 때문에, &
기호를 입력할 필요가 없습니다.
char value[100];
gets(value); // 마지막 \n를 \0으로 대체
fgets(value, size, stdin); // 마지막 \n를 유지
표준 입출력인 scanf
와 다르게, 긴 문자열을 입력받을때 편리한 입력방식입니다.
엔터를 입력하면 문자열에 자동으로 ‘\n’문자가 저장됩니다.
gets
함수는 널문자로 이를 대체합니다.
fgets
함수는 이 엔터를 유지합니다.
💡 지적 환영합니다
Comments