| 함수 | 설명 | 
|---|---|
| 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차원 배열 + 문자열)