함수 | 설명 |
---|---|
isalpha(c) | c가 영문자인가?(a-z, A-Z) |
isupper(c) | c가 대문자인가?(A-Z) |
islower(c) | c가 소문자인가?(a-z) |
isdigit(c) | c가 숫자인가?(0-9) |
isalnum(c) | c가 영문자이나 숫자인가?(a-z, A-Z, 0-9) |
isxdigit(c) | c가 16진수의 숫자인가?(0-9, A-F, a-f) |
isspace(c) | c가 공백문자인가?(‘ ’, ‘\n', '\t', '\v', '\r') |
ispunct(c) | c가 구두점 문자인가? |
isprint(c) | C가 출력가능한 문자인가? |
iscntrl(c) | c가 제어 문자인가? |
isascii(c) | c가 아스키 코드인가? |
함수 | 설명 |
---|---|
toupper(c) | c를 대문자로 바꾼다. |
tolower(c) | c를 소문자로 바꾼다. |
toascii(c) | c를 아스키 코드로 바꾼다. |
소문자이면 대문자로 변환하고 문자를 출력하는 예제
#include <stdio.h>
#include <ctype.h>
int main() {
int c;
while((c = getchar()) != EOF) {
if(islower(c))
c = toupper(c);
putchar(c);
}
string.h 헤더 추가해야한다.
함수 | 설명 |
---|---|
strlen(s) | 문자열 s의 길이를 구한다. |
strcpy(s1, s2) | s2를 s1에 복사한다. |
strcat(s1, s2) | s2를 s1의 끝에 붙여넣는다. |
strcmp(s1, s2) | s1과 s2를 비교한다. |
strncpy(s1, s2, n) | s2의 최대 n개의 문자를 s1에 복사한다. |
strncat(s1, s2, n) | s2의 최대 n개의 문자를 s1의 끝에 붙여넣는다. |
strncmp(s1, s2, n) | 최대 n개의 문자까지 s1과 s2를 비교한다. |
strchr(s, c) | 문자열 s안에서 문자 c를 찾는다. |
strstr(s1, s2) | 문자열 s1에서 문자열 s2를 찾는다. |
배열의 크기와 배열에 저장된 문자열의 길이는 다를 수 있다.
strlen 함수는 배열에 저장된 문자열의 길이를 구해 반환한다.
ex) 두 문자열 중 길이가 긴 단어 출력
#include <stdio.h>
#include <string.h>
int main() {
char str1[50], str2[50];
char *resp; // 문자열이 긴 배열을 선택할 포인터
printf("2개의 과일 이름 입력 : ");
scanf("%s%s", st1, str2);
// 배열에 저장된 문자열 길이 비교
if(strlen(str1) > strlen(str2))
resp = str1;
else
resp = str2;
printf("이름이 긴 과일은 : %s\n", resp);
}
char 배열은 문자열로 초기화 한 뒤 다른 문자열로 바꾸기 위해서는 한 문자씩 바꾸는 번거로운 작업을 해야한다.
strcpy 함수를 사용하면 char 배열에 문자열을 복사하는 대입 연산을 수행할 수 있다.
#include <stdio.h>
#include <string.h> // strcpy 함수 사용위해 필요함
int main() {
char str1[30] = "strawberry";
char str2[30] = "apple";
char *ps1 = "banana"; // 포인터로 문자열 상수 연결
char *ps2 = str2; // 포인터로 배열 연결
printf("최초 문자열 : %s\n", str1);
strcpy(str1, str2); // str1에 str2 문자열 복사
printf("바뀐 문자열 : %s\n", str1);
strcpy(str1, ps1); // str1에 ps1 문자열 복사
printf("바뀐 문자열 : %s\n", str1);
strcpy(str1, ps2); // str1에 ps2(str2) 문자열 복사
printf("바뀐 문자열 : %s\n", str1);
strcpy(str1, "banana");
printf("바뀐 문자열 : %s\n", str1);
}
첫 번째 인수 : char 배열이나 배열명을 저장한 포인터
두 번째 인수 : 문자열 시작 위치를 알 수 있는 변수
문자열을 복사할 때 문자의 수를 지정할 수 있다.
ex) 문자열 "apple-pie"의 앞에서 5개의 문자만 배열 str에 복사
#include <stdio.h>
#include <string.h>
int main() {
char str[30] = "mango tree";
strncpy(str, "apple-pie", 5);
printf("%s\n", str);
}
str 배열을 apple로만 쓰려면 str[5] = '\0'로 널 문자를 추가해야 한다.
문자열을 이어 붙인다.
#include <stdio.h>
#include <string.h>
int main() {
char str[30] = "straw";
strcat(str, "berry"); // str 배열에 문자열 붙이기
printf("%s\n", str);
strncat(str, "piece", 3); // str 배열에 3개의 문자 붙이기
printf("%s\n", str);
}
붙여넣을 배열에서 널 문자의 위치를 찾고 그 위치부터 문자를 추가하고 마지막에 널 문자를 저장한다.
▼ 여러가지 초기화 방법 (빈 배열로)
char str[30] = {'\0'}; // 널 문자로 초기화
char str[30] = {0}; // 널 문자의 아스키코드 값으로 초기화
char str[30] = ""; // 큰따옴표 안에 아무것도 없으므로 널 문자로 초기화
char str[30];
str[0] = '\0'; // 첫 번째 배열 요소만 별도로 초기화
strcmp 함수는 두 문자열의 사전 순서를 판단하여 그 결과를 반환한다.
두 문자열이 같은지 판별할 때 사용할 수 있다.
strcmp(str1, str2); // str1이 str2보다 사전에 나중에 나오면 1 반환
// str1이 str2보다 사전에 먼저 나오면 -1 반환
// str1과 str2가 같은 문자열이면 0 반환
두 문자열에서 첫 문자부터 아스키코드 값을 비교하여 아스키코드 값이 크면 사전의 뒤에 나오는 문자열이 된다.
#include <stdio.h>
#include <string.h>
int main() {
char str1[30] = "pear";
char str2[30] = "peach";
printf("사전에 나중에 나오는 과일 이름 : ");
if(strcmp(str1, str2,) > 0)
printf("%s\n", str1);
else
printf("%s\n", str2);
}
strncmp 함수는 비교할 문자의 개수를 지정할 수 있다.
printf("앞에서 3개의 문자만 비교하면?\n");
if(strncmp(str1, str2, 3) == 0) // 앞에서 3개의 문자가 같으면
printf("같다.\n");
else
printf("다르다.\n");
[백준] 9086번: 문자열
[백준] 2744번: 대소문자 바꾸기
[백준] 1152번: 단어의 개수
[백준] 11721번: 열 개씩 끊어 출력하기
[백준] 9093번: 단어 뒤집기 (어려움)
[백준] 11586번: 지영 공주님의 마법 거울 (2차원 배열 + 문자열)