[C++] 문자열(string)
C++에서 문자열을 나타내는 방법
1. 문자 배열을 생성해서 문자열을 저장하고, 맨 끝에 NULL문자를 추가하는 방법
2. string 클래스를 사용하는 방법(추후)
a | 'a' | "a" |
변수 a | 하나의 문자, 아스키 코드값과 같음 |
문자열, 끝에 NULL문자 추가됨 |
문자 배열의 초기화
char str[6] = "HELLO";
1. 문자열 상수를 할당하면 컴파일러가 자동으로 끝에 NULL 문자 추가
2. 배열의 크기는 문자열보다 +1 되어야 함(NULL 문자)
문자열의 길이를 구하는 프로그램
cout << "\n문자열의 길이 구하기\n";
char strCount[80] = "C++ is very easy to me";
int x = 0;
while(strCount[x] != '\0'){
x++;
}
cout << "문자열의 길이는 " << x << "입니다.";
1. 문자열의 끝에 NULL문자('\0')을 만나기 전까지 x의 값 1씩 증가시킨다.
2. 라이브러리 함수로도 값을 구할 수 있다.
// #include <cstring> 필요
cout << "문자열 " <<str3 << "의 길이는 " << strlen(strCount) <<"입니다\n" << endl;
문자열 라이브러리 함수
함수 | 설명 |
strlen(s) | 문자열 s의 길이를 구한다 |
strcpy(s1, s2) | s2를 s1에 복사한다(방향 주의!) |
strcat(s1, s2) | s2를 s1의 끝에 붙여넣는다 |
strcmp(s1, s2) | s1과 s2를 비교한다 |
strchr(s, c) | 문자열 s 안에서 문자 c를 찾는다 |
strstr(s1, s2) | 문자열 s1에서 문자열 s2를 찾는다 |
[TIP] strcpy_s를 쓰는 게 좋다(자리수가 다른 경우 미리 검사)
문자열의 복사
1. looping 이용
2. 라이브러리 함수 이용
[Key Point]
// #1-1. str20, str5 문자열의 길이 구하기
int length1 = strlen(str20);
int length2 = strlen(str5);
// #1-2. str20 문자열 뒤에 str5 문자열 합치기
for (int i = 0; i<length2; i++){
str20[length1] = str5[i];
length1++;
}
// #1-3. 합쳐진 문자열 끝에 NULL 문자 추가하기
str20[length1] = '\0';
//
// 문자열
//
// Created by yeonsu on 2022/06/09.
//
#include <iostream>
using namespace std;
int main(){
// 문자열 합치기
cout << "\nstrcat: 문자열 합치기" << endl;
// "digital" + "media"
char str20[21] = "digital"; // 한글 10글자까지 저장 가능
char str5[6] = "media";
cout << "\nstr20: " << str20 << endl;
cout << "str5: " << str5 << endl << endl;
// str20 = str20 + "media"; // a += b; 처럼 '+'연산자를 이용해서 합칠 수 없다.
// #1. loopig 이용해서 문자열 합치기
cout << "#1. loopig 이용해서 문자열 합치기" << endl;
// #1-1. str20, str5 문자열의 길이 구하기
int length1 = strlen(str20);
int length2 = strlen(str5);
// #1-2. str20 문자열 뒤에 str5 문자열 합치기
for (int i = 0; i<length2; i++){
str20[length1] = str5[i];
length1++;
}
// #1-3. 합쳐진 문자열 끝에 NULL 문자 추가하기
str20[length1] = '\0';
cout << str20 << endl;
// #2. 함수를 이용해서 문자열 합치기
cout << "\n#2. 함수를 이용해서 문자열 합치기" << endl;
char str21[22] = "digital";
cout << strcat(str21, str5) << endl << endl;
return 0;
}
문자열의 비교
[결과값]
음수: s1 < s2
0: s1 == s2
양수: s1 > s2
// 문자열의 비교
cout << "\n문자열의 비교" << endl;
cout << "\n#1. 일반적인 방법\n" << endl;
char str1[5] = "PINK";
char str2[6] = "BROWN";
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl << endl;
if(str1 == str2){
cout << "같습니다."<<endl;
}
else
cout << "다릅니다." <<endl;
cout << "\n#2. 함수를 이용하는 방법" << endl;
if(strcmp(str1, str2) == 0){
cout << "같습니다." << endl;
}
else
cout << "다릅니다." << endl;
문자열 속에 문자
strchr(str, c)의 반환값: 문자의 시작 주소 반환
미발견시 NULL 주소값 (0) 반환
cout << "\nstrchr: 문자열 속의 문자" << endl;
char str3[] = "a";
strcpy(str3, "digital");
strchr(str3, 't'); //str3 속에 't'문자가 있는가?
// strchr을 통해 주소값을 반환받음 -> 포인터 활용
char *p;
p = strchr(str3, 't');
if (p==NULL)
cout << "존재하지 않습니다." << endl;
else
cout << p << endl; //tal 출력
문자 처리 라이브러리 함수
//문자 처리 라이브러리 함수
cout << "\n문자 처리 라이브러리 함수" << endl;
char c = 'A';
if(isupper(c))
cout << "대문자입니다." << endl;
else
cout << "대문자가 아닙니다." << endl;