本文整理汇总了C++中std::basic_string::find_last_of方法的典型用法代码示例。如果您正苦于以下问题:C++ basic_string::find_last_of方法的具体用法?C++ basic_string::find_last_of怎么用?C++ basic_string::find_last_of使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类std::basic_string
的用法示例。
在下文中一共展示了basic_string::find_last_of方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MBCS
const std::string igs::resource::msg_from_err_(
const std::basic_string<TCHAR> &tit, const DWORD error_message_id,
const std::basic_string<TCHAR> &file, const std::basic_string<TCHAR> &line,
const std::basic_string<TCHAR> &funcsig,
const std::basic_string<TCHAR> &comp_type,
const std::basic_string<TCHAR> &msc_full_ver,
const std::basic_string<TCHAR> &date,
const std::basic_string<TCHAR> &time) {
/*
汎用データ型 ワイド文字(UNICODE)(※1) マルチバイト文字(_MBCS)(※2)
TCHAR wchar_t char
LPTSTR wchar_t * char *
LPCTSTR const wchar_t * const char *
※1 1文字を16ビットのワイド文字として表すUnicode を使う方法
すべての文字が 16 ビットに固定されます。
マルチバイト文字に比べ、メモリ効率は低下しますが処理速度は向上します
※2 1文字を複数のバイトで表すマルチバイト文字
MBCS(Multibyte Character Set) と呼ばれる文字集合を使う方法
可変長だが、事実上、サポートされているのは 2 バイト文字までなので、
マルチバイト文字の 1 文字は 1 バイトまたは 2 バイトとなります。
Windows 2000 以降、Windows は内部で Unicode を使用しているため、
マルチバイト文字を使用すると内部で文字列の変換が発生するため
オーバーヘッドが発生します。
UNICODEも_MBCSも未定義のときはこちらになる。
*/
std::basic_string<TCHAR> errmsg;
errmsg += TEXT('\"');
/* makefile-vc2008mdAMD64等でコンパイルすると
フルパスで入ってくるのでファイル名だけにする
*/
std::basic_string<TCHAR>::size_type index = file.find_last_of(TEXT("/\\"));
if (std::basic_string<TCHAR>::npos != index) {
errmsg += file.substr(index + 1);
} else {
errmsg += file;
}
errmsg += TEXT(':');
errmsg += line;
errmsg += TEXT(':');
errmsg += comp_type;
errmsg += TEXT(":");
errmsg += msc_full_ver;
{
std::basic_istringstream<TCHAR> ist(date);
std::basic_string<TCHAR> month, day, year;
ist >> month;
ist >> day;
ist >> year;
errmsg += TEXT(':');
errmsg += year;
errmsg += TEXT(':');
errmsg += month;
errmsg += TEXT(':');
errmsg += day;
}
errmsg += TEXT(':');
errmsg += time;
errmsg += TEXT('\"');
errmsg += TEXT(' ');
errmsg += TEXT('\"');
errmsg += funcsig;
errmsg += TEXT('\"');
errmsg += TEXT(' ');
errmsg += TEXT('\"');
if (0 < tit.size()) {
errmsg += tit;
}
if (NO_ERROR != error_message_id) {
errmsg += TEXT(':');
LPTSTR lpMsgBuf = 0;
if (0 < ::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, error_message_id,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) /* 既定言語 */
,
reinterpret_cast<LPTSTR>(&lpMsgBuf), 0,
NULL)) { /* --- 成功 --- */
errmsg += lpMsgBuf;
::LocalFree(lpMsgBuf);
std::string::size_type index = errmsg.find_first_of(TEXT("\r\n"));
if (std::string::npos != index) {
errmsg.erase(index);
}
} else { /* エラー */
errmsg += TEXT("FormatMessage() can not get (error)message");
}
}
errmsg += TEXT('\"');
/* MBCSで返す */
return igs::resource::mbs_from_ts(errmsg);
}