안녕하세요, 여행벌입니다.
오늘은 저번 포스팅에 이어서 String Library 함수들을 소개해보겠습니다.
[String Library 소개(1)]
https://travelbeeee.tistory.com/123
6. append() 함수
append() 함수는 하나의 문자열의 끝에 다른 문자열을 추가하는 함수입니다.
저번 포스팅에서 다뤘던 '+' 연산자랑 같은 기능을 하지만,
조금 더 다양한 기능을 할 수 있어서 상황에 따라 유용하게 사용할 수 있습니다.
-append() 함수
1. 문자열.append(추가할문자열);// 추가할 문자열을 맨 끝에 추가함.
2.문자열.append(추가할문자열, 시작위치, 개수);
// 추가할 문자열의 시작 위치부터 개수만큼만 맨 끝에 추가함.
3.문자열.append(개수, 추가할문자);
//추가할 문자를 개수만큼 맨 끝에 추가함.
예제를 통해 3가지 유형을 다 익혀보도록 하겠습니다.
#include<iostream>
#include<string>
using namespace std;
int main(void) {
string input1, input2, input3, input4;
input1 = "abcde";
input2.append(input1); //input2에 input1을 복사한다.
cout << "input2는 : " << input2 << '\n';
input3.append(input1, 3, 2);
cout << "input3는 : " << input3 << '\n';
input4.append(3, 'x');
cout << "input4는 : " << input4 << '\n';
}
먼저 input1 에 "abcde"를 저장하고,
input2에 input2.append(input1)을 이용하여 input2의 끝에 input1을 추가해보겠습니다.
예상 결과는 input2 = "abcde" 입니다.
input3 에는 input1에 저장된 "abcde" 문자열의 3번 인덱스부터 2글자를 추가해보겠습니다.
예상 결과는 input3 = "de"입니다.
input4에는 문자 'x'를 3번 반복해서 추가해보도록 하겠습니다.
예상 결과는 input4 = "xxx" 입니다.
과연 예상대로 결과가 나올까요?
결과 :
input2는 : abcde
input3는 : de
input4는 : xxx
예상대로 잘 나오네요!
여기서 주의할 점은, 3번째 함수 원형은 문자열이 아닌 문자만 가능하다는 점입니다.
input4에 "abc"를 4번 추가하고 싶어도, input4.append(4,"abc") 라고 입력하면 오류가 발생합니다.
7. find() 함수
find 함수는 특정 문자열을 찾아, 그 시작 위치(int 형)을 반환하는 함수입니다.
-find() 함수
1.문자열.find(찾을 문자열)// 인덱스 0부터 찾을 문자열을 찾아, 그 시작 위치를 반환함.
2. 문자열.find(찾을 문자)
// 인덱스 0부터 찾을 문자를 찾아, 그 시작 위치를 반환함.
3. 문자열.find(찾을문자열, 시작위치)
// 시작 위치부터 찾을 문자열을 찾아, 그 시작 위치를 반환함.
예시를 통해서 익혀볼까요?
#include<iostream>
#include<string>
using namespace std;
int main(void) {
string input1 = "abcdefghijklmnopqrstuvwxyz";
cout << "문자열 efg 의 첫 시작 인덱스는 : " << input1.find("efg") << '\n';
cout << "문자열 afg 의 첫 시작 인덱스는 : " << input1.find("afg") << '\n';
cout << "문자 k 의 첫 시작 인덱스는 : " << input1.find('k') << '\n';
cout << "문자 A 의 첫 시작 인덱스는 : " << input1.find('A') << '\n';
cout << "문자열 efg 를 인덱스 10번 부터 찾았을 때 : " << input1.find("efg", 10) << '\n';
cout << "문자열 afg 를 인덱스 3번 부터 찾았을 때 : " << input1.find("afg", 3) << '\n';
}
input1에서 "efg" 문자열을 찾고 싶습니다.
input1에 "efg" 문자열이 인덱스 4~6 에 있으므로, 4를 반환할 것 같습니다.
두 번 째로는, input1에서 "afg" 문자열을 찾고 싶습니다.
그런데 input1에 "afg" 문자열이 없으므로, 쓰레기 값이 반환되겠죠?
그다음으로는 input1에서 'k', 'A' 문자를 찾고 싶습니다.
'k' 는 인덱스 10 이므로 10을 반환하고, 'A' 는 input1에 없으므로, 쓰레기 값을 반환하겠죠?
마지막으로 "efg" 문자열을 10번 인덱스부터 찾고 싶습니다.
"efg" 문자열은 인덱스 4~6에 존재하므로, 쓰레기 값이 반환될 것 같습니다.
마찬가지로 "afg" 문자열은 존재하지 않으므로, 쓰레기 값이 반환될 것 같습니다.
문자열 efg 의 첫 시작 인덱스는 : 4
문자열 afg 의 첫 시작 인덱스는 : 4294967295
문자 k 의 첫 시작 인덱스는 : 10
문자 A 의 첫 시작 인덱스는 : 4294967295
문자열 efg 를 인덱스 10번 부터 찾았을 때 : 4294967295
문자열 afg 를 인덱스 3번 부터 찾았을 때 : 4294967295
8. compare() 함수
compare() 함수는 두 문자열을 비교하는 함수 입니다.
-compare() 함수
문자열1.compare(문자열2)
// 문자열1과 문자열2를 비교해서 상황에 따라 다른 int형 값을 반환합니다.
만약 문자열1과 문자열2가 같다면, int형 0을 반환합니다.
문자열1과 문자열2가 다르다면, 달라지는 그 순간의 문자에 대해서
문자열1 이 문자열2 보다 사전 순으로 앞에 있을 경우 -1
뒤에 있을 경우 1을 반환합니다.
사전 순으로 계산하는 방법이 생각보다 복잡하므로,
같으면 0 다르면 0이 아닌 숫자가 나온다고 생각하고 사용해도 좋을 것 같습니다.
#include<iostream>
#include<string>
using namespace std;
int main(void) {
string input1 = "abc", input2 = "ade", input3 = "a\c", input4 = "abc";
std::cout << input1.compare(input2) << " " << input1.compare(input3) << '\n';
std::cout << input1.compare(input4);
}
출력 결과 :
-1 -1
0
input2, input3를 input1이랑 다르므로 0이 아닌 값, input4는 같으므로 0이 출력되는 것을 볼 수 있습니다.
9. replace() 함수
replace() 함수는 특정 문자열을 찾아 그 문자열을 다른 문자열로 대체하는 함수입니다.
-replace() 함수
문자열.replace(대체할 문자열의 시작 위치, 대체할 문자열의 길이, 새로운 문자열)
//전달된 시작 위치부터 대체할 문자열의 길이만큼 삭제 후 새로운 문자열을 추가한다.
바로 예시를 통해 익혀볼까요?
#include<iostream>
#include<string>
using namespace std;
int main(void) {
string input1 = "I am a good student.";
std::cout << input1.replace(5, 4, "bad");
}
input1 = "I am good student." 에서 5번 째 인덱스 g 부터 4글자, 즉 good을 bad로 대체해보았습니다.
출력 결과 :
I am a bad student.
예상한 대로 잘 출력되는 것을 확인할 수 있습니다.
이처럼 C++은 C와는 달리 String Library를 통해서 Python만큼 문자열을 쉽게 다룰 수 있습니다.
잘 익혀두는 게 좋겠죠?
이상으로 String Library 소개를 마치겠습니다.
'Computer Language > C , C++' 카테고리의 다른 글
[C++] STL list 기본 명령어 정리 (0) | 2020.02.03 |
---|---|
[C++] STL Priority_Queue Library 기본 명령어 정리 (2) | 2019.10.04 |
[C++] STL String Library 기본 명령어 정리(1) (0) | 2019.10.03 |
[C++] 스택 자료구조 & STL Stack Library 기본 명령어 정리 (0) | 2019.09.19 |
[C++] 수행 시간 측정하기, '시간 초 재기' (0) | 2019.09.18 |