C++ 영어 대소문자 변환

[CODE]
#include <iostream>
#include <algorithm>
#include <string>

using std::cout;
using std::endl;
using std::string;
using std::transform;

int main()
{
string s = “Yoway Bahamut Lagoona”;
transform( s.begin(), s.end(), s.begin(), toupper );

cout<<s<<endl;
}
[/CODE]

초간단해 뵈지만 저 내용을 찾는데 무려 1시간이 걸렸다 -_-;;
일단 msdn 이나 그런곳에서 찾으면 locale 이란 객체를 사용해서 영문자뿐이아니라 불어,독어 등등의 문자변화예제가 나오는데 토나오게 복잡하다.

[CODE]
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
locale loc1 ( “German_Germany” );

char *string = “HELLO, MY NAME IS John!”;

use_facet<ctype<char> > ( loc1 ).tolower
( &string[0], &string[strlen(&string[0])-1] );
cout << “The lowercase string is: ” << string << endl;
}
[/CODE]

이게 msdn 에 나온 예제… 뭐 자세히 보면 그리 복잡해뵈지도 않지만…문제는 비주얼스튜디오 2002에서 기본적으로 컴파일해서 실행시키면 런타임 오류가 난다. 컴파일 옵션 /EHsc 를 주라고 하는데… 얼마나 찝찝한가! 안그래도 UNIX 포팅때문에 CString 을 없에고 있는 마당인데 뭔가 컴파일 설정 들어가고 그러는 코드를 짜놓으면 후회할것 같다.

locale 에 관련된 내용도 좀 찾아보고 사용해야 되고..
에휴…어쨋거나 메모. STL 사용의 길은 멀고 험하다..

ps. 나중에 locale 관련 참고할 url (http://turboc.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=16)

C++에서 sprintf 같은 형식으로 문자열 생성하는것

std::string 을 쓸때 CString 에서 처럼 Format(“%d”, 100 ) 이런 코드를 작성하지 못해서 좀 난감해 하고 있었는데

[CODE]cout<<100<<“하하”<<endl;[/CODE]
이런 코드를 생각해 볼때
iostream 쪽을 상속받아서 위의 sprintf 같이 문자열을 생성해내는 클래스가 분명히 있을거라 생각해서 이것저것 뒤져보니 stringstream 이라는 클래스가 있었다.
예제 코드는

[CODE]
#include <iostream>
#include <string>
#include <sstream>

using std::string;
using std::cout;
using std::endl;
using std::ostream;
using std::stringstream;

int main()
{
int interger = 10;
double doublevalue = 213.33;
string tmp = “yoway”;

string str;
stringstream stream(stringstream::in | stringstream::out);
stream<<interger<<“, “<<doublevalue<<“, “<<tmp;
str = stream.str();
cout<<str<<endl;

return 0;
}
[/CODE]

아마 cout 쓸때 서식지정하는 방법과 동일하게 stringstream 도 사용할수 있을듯…

희한한 백터

음…예전에 만들던 WaferMapSolution 이란걸 지금 다시 쫌 손대고 있는데 어찌어찌 하다보니 간단하게 샥샥 만들면 될걸 프로젝트를 좀 정리하는 차원에서 Exe만들던 프로젝트에 왕창 다 들어가 있던 코드중에서 수학연산같은 MFC를 안쓰는 부분은 따로 때어내서 Engine 이란 DLL로 만들고 있었다.

근데 작업중에 딱 막히는것…
백터를 상속받은 클래스중에…. 포인터변수를 템플릿 매개변수로 받았을 때는 별말 없는데 특정 구조체 같은걸 템플릿 매개변수로 받았을 때는

operator<
operator>
operator==

이 3가지 연산자를 구현하라고 난리를 치는것이다. (게다가 왼쪽 변수는 꼭 const로 구현하라고! C2678 이라는 에러)

…이런 건방진… 백터주제에 저런 연산자는 어디다가 쓴다고 저런걸 구현하라고… 그리고 왜 exe 프로젝트에 있을때는 가만있다가 dll로 오니깐 난리야…

메모메모… 비주얼 스튜디오 2002 에서 그랬음.