str.hpp
#include <stdarg.h>
#include <string>
#include <vector>
#include <cassert>
/* STL中的string和wstring的格式化方法之二 */
#ifndef __STR_STR_HPP_INCLUDED_
#define __STR_STR_HPP_INCLUDED_
namespace str
{
//字符串格式化函数
std::string format(const char *fmt, ...)
{
std::string strResult="";
if (NULL != fmt)
{
va_list marker = NULL;
va_start(marker, fmt); //初始化变量参数
size_t nLength = _vscprintf(fmt, marker) + 1; //获取格式化字符串长度
std::vector<char> vBuffer(nLength, '\0'); //创建用于存储格式化字符串的字符数组
int nWritten = _vsnprintf_s(&vBuffer[0], vBuffer.size(), nLength, fmt, marker);
if (nWritten>0)
{
strResult = &vBuffer[0];
}
va_end(marker); //重置变量参数
}
return strResult;
}
//字符串格式化函数
std::wstring format(const wchar_t *fmt, ...)
{
std::wstring strResult=L"";
if (NULL != fmt)
{
va_list marker = NULL;
va_start(marker, fmt); //初始化变量参数
size_t nLength = _vscwprintf(fmt, marker) + 1; //获取格式化字符串长度
std::vector<wchar_t> vBuffer(nLength, L'\0'); //创建用于存储格式化字符串的字符数组
int nWritten = _vsnwprintf_s(&vBuffer[0], vBuffer.size(), nLength, fmt, marker);
if (nWritten > 0)
{
strResult = &vBuffer[0];
}
va_end(marker); //重置变量参数
}
return strResult;
}
}
#endif
/* STL中的string和wstring的格式化方法之一 */
//最近开始使用STL,说实在的,用惯了MFC,突然用STL,真的很不习惯,在我用STL中的string类就卡住了好长时间。
//string没有CString::Format那样的方法,该怎么格式化字符串呢?可以这样做:
//#include <string>
//#include <ostringstream>
//#ifdef _UNICODE
//#define tstring wstring
//#define tostringstream wostringstream
//#else
//#define tstring string
//#define tostringstream ostringstream
//#endif
//tostringstream strStream;
//tstring str;
//strStream<< _T("The value of X is :")<< X <<endl;
//str = strStream.str();
//好了,这样就可以了。当你想把tstring 转为LPCTSTR时,必须调用c_str(),即LPCTSTR lpszString = str.c_str();
测试
// string_format.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <cassert>
#include "str.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
const double PI=3.1415926;
std::string s=str::format("ANSI%s---字符:%c;整数:%d;双精度:%f", "测试",'a', 38, PI);
std::cout<<s<<std::endl;
std::wstring ws=str::format(L"UNICODE%s---字符:%c;整数:%d;双精度:%f", L"测试",'u', 83, PI);
std::wcout.imbue(std::locale("chs"));// std::wcout想输出中文,需要加这句
std::wcout<<ws<<std::endl;
system("pause");
return 0;
}
//Primary language Sublanguage Language string
//Chinese Chinese "chinese"
//Chinese Chinese (simplified) "chinese-simplified" or "chs"
//Chinese Chinese (traditional) "chinese-traditional" or "cht"
//Czech Czech "csy" or "czech"
//Danish Danish "dan" or "danish"
//Dutch Dutch (default) "dutch" or "nld"
//Dutch Dutch (Belgium) "belgian", "dutch-belgian", or "nlb"
//English English (default) "english"
//English English (Australia) "australian", "ena", or "english-aus"
//English English (Canada) "canadian", "enc", or "english-can"
//English English (New Zealand) "english-nz" or "enz"
//English English (United Kingdom) "eng", "english-uk", or "uk"
//English English (United States) "american", "american english", "american-english", "english-american", "english-us", "english-usa", "enu", "us", or "usa"
//Finnish Finnish "fin" or "finnish"
//French French (default) "fra" or "french"
//French French (Belgium) "frb" or "french-belgian"
//French French (Canada) "frc" or "french-canadian"
//French French (Switzerland) "french-swiss" or "frs"
//German German (default) "deu" or "german"
//German German (Austria) "dea" or "german-austrian"
//German German (Switzerland) "des", "german-swiss", or "swiss"
//Greek Greek "ell" or "greek"
//Hungarian Hungarian "hun" or "hungarian"
//Icelandic Icelandic "icelandic" or "isl"
//Italian Italian (default) "ita" or "italian"
//Italian Italian (Switzerland) "italian-swiss" or "its"
//Japanese Japanese "japanese" or "jpn"
//Korean Korean "kor" or "korean"
//Norwegian Norwegian (default) "norwegian"
//Norwegian Norwegian (Bokmal) "nor" or "norwegian-bokmal"
//Norwegian Norwegian (Nynorsk) "non" or "norwegian-nynorsk"
//Polish Polish "plk" or "polish"
//Portuguese Portuguese (default) "portuguese" or "ptg"
//Portuguese Portuguese (Brazil) "portuguese-brazilian" or "ptb"
//Russian Russian (default) "rus" or "russian"
//Slovak Slovak "sky" or "slovak"
//Spanish Spanish (default) "esp" or "spanish"
//Spanish Spanish (Mexico) "esm" or "spanish-mexican"
//Spanish Spanish (Modern) "esn" or "spanish-modern"
//Swedish Swedish "sve" or "swedish"
//Turkish Turkish "trk" or "turkish"