U E D R , A S I H C RSS

문자반대출력/문보창

소감

음 만약에 한글과 같은 확장문자가 담겼다면 process_wchar() 함수에서 약간의 꼼수를 부린다. 가상의 예(실제로 렇게 되지는 않지만, 원리는 같음)를 들어보자. "가나" 라는 문자열을 ver1과 같은 통상의 프로그램으로 뒤집으면 "나가"와 같 프로그래머가 원했던 결과가 나오는 것 아니고 "ㅏㄴㅏㄱ"가 나온다. 그렇다면 확장문자를 판단해서 문자열을 뒤집기 전에 "가나"라는 문자열을 "ㅏㄱㅏㄴ" 렇게 만들어 놓는다면 기존 ver1의 프로세스를 전혀 바꾸지 않고도, process_wchar()만을 추가하는 것으로 원했던 기능을 모두 수행하게 된다.

코드

ver1 (확장 문자 지원 안함)

~cpp 
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;

string read_file();
void write_file(const string & str);

void main()
{
	string str = read_file();
	reverse(str.begin(), str.end()); // 문자열을 거꾸로 해주는 STL 함수
	 write_file(str);
}

// 파일로부터 문자열을 읽어들인다.
string read_file()
{
	string str;
	fstream fin("source.txt");
	char ch = fin.get();
	while (ch != EOF)
	{
		str += ch;
		ch = fin.get();
	}
	return str;
}

// 파일에 문자열을 쓴다.
void write_file(const string & str)
{
	fstream fout("result.txt");
	fout << str;
}

ver2 (확장문자까지 판단해서 반대로 한다)

~cpp 
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;

string read_file();
void write_file(const string & str);
void process_wchar(string & str);

void main()
{
	string str = read_file();
	process_wchar(str);
	reverse(str.begin(), str.end());  // 문자열을 거꾸로 해주는 STL 함수
	 write_file(str);
}

// 확장문자를 위한 전처리 함수
void process_wchar(string & str)
{
	// str[i]는 char. 하지만  확장문자의 일부라면 음수가 담기게 된다.
	for (int i = 0; i < str.length(); i++)
	{
		if (str[i] < 0 && str[i + 1] < 0)
		{
			swap(str[i], str[i+1]);
			i++;
		}
	}
}

// 파일로부터 문자열을 읽어들인다.
string read_file()
{
	string str;
	fstream fin("source.txt");
	char ch = fin.get();
	while (ch != EOF)
	{
		str += ch;
		ch = fin.get();
	}
	return str;
}

// 파일에 문자열을 쓴다.
void write_file(const string & str)
{
	fstream fout("result.txt");
	fout << str;
}

나한테 할말

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:29
Processing time 0.0118 sec