IT 프로그래밍/객체지향프로그래밍

객체지향프로그래밍 그룹액티비티 2문제

기술1 2024. 4. 16. 14:21
반응형

문자열에서 단어의 인덱스를 찾아주는 프로그램

#include <iostream>
#include <string>

using namespace std;

void fun(string str, string str1)
{
	unsigned int found = str.find(str1);
	if (found != string::npos)
		cout << found << endl;
}

int main()
{
	string str{ "C++ string Quiz" };
	string str1{ "string" };
	fun(str, str1);
	return 0;
}

간단한 예제 코드입니다.

 

하나하나씩 분석을 해보겠습니다. 

 

먼저 문자열 string으로 구성된 str1, str2가 존재합니다. 이 프로그램의 의도는는 str2의 단어를 str에서 찾아서 그것에 해당하는 인덱스를 출력해주는 것입니다. 

 

그것을 기능하는 것이 바로 임의로 정의한 void fun() 함수인데요. 

 

fun 함수에는 unsigned int found를 통해서 정의가 되어 있습니다. str.find(str2)를 통해서 str2의 단어를 str안에서 찾습니다. string::npos는 찾지 못했을 때 find가 return 해주는 값입니다. 여기서는 npos가 나오는 경우에 굳이 출력할 필요가 없으니 if문을 통해 npos가 아니면 즉 값이 나오면 해당 값을 출력해주는 함수입니다. 

 

find() 함수의 역할과

find함수가 값을 찾지 못하면 string::npos를 반환한다는 것 

이것을 알아두어야 합니다. 

 

단어를 역순으로 출력하기 

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string str("microsoft");
	string::reverse_iterator r;
	for (r = str.rbegin(); r < str.rend(); r++)
		cout << *r;
	return 0;
}

string에 있는 단어를 역순으로 출력해주는 것입니다. 

 

string str을 선언하고 microsoft로 초기화를 합니다. 

 

그리고 역방향 반복자인 r을 선언해줍니다. 그리고 for문을 보면 r이 역순으로 출력되는 것을 볼 수 있는데요. 시작점은 rbegin()을 통해 맨 뒤에서부터 시작해 끝나는 점도 rend()를 통해 시작점으로 두고 있습니다. 이렇게 될 경우 역순으로 출력이 되는데요.

 

그리고 마지막에 역방향 반복자 r을 가리키는 포인터를 통해서 문자를 출력합니다. r은 반복자이며 주소를 나타내는 것이 아니기 때문에 반복자가 가리키는 값 즉 문자를 나타냅니다. 따라서 올바른 출력은 *r입니다. 

 

역방향 반복자

 

string::reverse_iterator r; 이것이 역방향을 선언해주는 것입니다. 

 

역방향은 *r 이렇게 *을 붙여서 출력을 해줘야 합니다. 

 

rfind를 사용한 예제

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string str("nobody does like this");
	string key("nobody");
	size_t f = str.rfind(key);
	if (f != string::npos)
		str.replace(f, key.length(), "everybody");
	cout << str << endl;
	return 0;
}

이거 같은 경우 문자열 str은 "nobody does like this"로 초기화가 되어 있으며 string key("nobody")는 문자열 key를 nobody로 초기화합니다. 

 

size_f f = str.rfind(key)는 str에서 key를 역방향으로 검색하여 마지막으로 등장하는 위치를 찾고 그 위치를 변수 f에 저장합니다. 만약 key가 str에 없다면 string::npos를 반환하게 됩니다. 

 

i찾았다면 str.replace(f, key.length(), "everybody");를 통해 str에서 f위치부터 key의 길이만큼의 부분을 everybody로 대체합니다. 

 

여기서 알아두어야 할 점은 

 

rfind의 사용법입니다. rfind는 문자열을 뒤에서 부터 찾아주는 함수입니다. 

반응형