본문 바로가기

강의자료/C/C++

052. 스트링(string) 클래스를 사용하자.


◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!



#include  
#include 	// cout << string 을 위해서 선언하여야 함.
#include 
using namespace std;

// 문제1.
void MakeLogString(string& str)
{
	int length = str.length() + 1 + 22;
	char* buffer = new char[length];

	time_t now=time(NULL);  //시간을 구하기 위한 초기화        
	tm t;
	localtime_s(&t, &now); //현재 시간 구하기
	sprintf_s(buffer, length, "[%04d/%02d/%02d-%02d:%02d:%02d] %s", 
		(t.tm_year+1900), (t.tm_mon+1), (t.tm_mday), 
		(t.tm_hour), (t.tm_min), (t.tm_sec), str.c_str());

	str = buffer;
	delete [] buffer;
}

// 문제2.
void PrintToken(string copy, char token)
{
	int count = 1;

	while(true)
	{
		int idx = copy.find(token);

		if(idx != -1)
		{
			string temp = copy.substr(0, idx);
			cout << count++ << " : " << temp << endl;
			copy.erase(0, idx+1);	// 토큰까지 삭제하기 위해 +1을 한다.
		}
		else
		{
			cout << count << " : " << copy << endl;
			break;
		}
	}
}

int main( )
{
	// 유니코드용.
	wcout.imbue(locale("korean"));
	wstring str = L"유니코드용 스트링 클래스";
	str += 46;
	wcout << str << endl;

	// 문제 1.
	string test01 = "start program!!";
	MakeLogString(test01);
	cout << test01 << endl;

	// 문제 2.
	string test02 = "바나나@사과@딸기@키위@파인애플@토마토@수박@참외";
	PrintToken(test02, '@');

	system("pause");

	// 강의 코드.
	string src = "MBC 아카데미 디지털 교육원";
	string dest;

	cout << endl << ">> #include 없이 출력하기." << endl;
	cout << src.c_str() << endl;

	cout << endl << ">> 문자열 복사." << endl;
	dest = src;
	cout << dest << endl;

	cout << endl << ">> 문자열의 일부만 복사." << endl;
	dest = src.substr(0, 12);	// 여기서 2번의 소멸자가 호출된다.
	cout << dest << endl;

	string str1("MBC 아카데미 ");
	string str2 = "디지털 교육원";

	cout << endl << ">> 문자열 합성." << endl;
	str1 += str2;
	cout << str1 << endl;

	cout << endl << ">> 문자열의 일부만 합성." << endl;
	str1 += str2.substr(0, 6);
	cout << str1 << endl;

	cout << endl << ">> 문자열 비교." << endl;
	if(src == str1) cout << "같은 문자열." << endl;
	else cout << "다른 문자열." << endl;

	cout << endl << ">> 문자열 삭제." << endl;
	src.erase(3, 9);
	cout << src << endl;

	cout << endl << ">> 문자열 길이." << endl;
	cout << src.size() << " / " << src.length() << endl;

	cout << endl << ">> 문자열 검색." << endl;
	string key = "디지털";
	cout << "문자열 검색 : " << (int)src.find(key) << endl;	// 검색된 문자열의 시작 인덱스를 반환한다, 실패시 -1반환.

	cout << endl << ">> 문자열 변경." << endl;
	src.replace(0, 3, "Korean BoroadCast");
	cout << src << endl;

	cout << endl << ">> 문자열 입력." << endl;
//	cin >> dest;
//	cout << dest << endl;

	// char 타입.
// 	char str[128];
// 	cin >> str;
// 	cin.getline(str, _countof(str));
// 	cout << str << endl;

	// string 타입.
	getline(cin, dest);

	if(dest.empty()) 
		cout << "아무것도 입력하지 않았습니다." << endl;
	else 
		cout << dest << endl;

	if(dest.empty() == false) cout << dest[0] << endl;

	return 0;
}