안녕하세요, 여행벌입니다.

오늘은 저번 포스팅에 이어서 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 소개를 마치겠습니다.

 

 

 

 

+ Recent posts