本文整理汇总了C++中CNativeW::Replace方法的典型用法代码示例。如果您正苦于以下问题:C++ CNativeW::Replace方法的具体用法?C++ CNativeW::Replace怎么用?C++ CNativeW::Replace使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CNativeW
的用法示例。
在下文中一共展示了CNativeW::Replace方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LoadKeyMacro
//.........这里部分代码省略.........
for( ; i <= nLineLen; ++i ){ // 最後の文字+1までスキャン
if( szLine[i] == LTEXT('\\') ){ // エスケープのスキップ
++i;
continue;
}
if( szLine[i] == cQuote ){ // 始まりと同じquotationで終了。
nEnd = i; // nEndは終わりの次の文字(')
break;
}
if( i == nLineLen ){ // 行末に来てしまった
::MYMESSAGEBOX(
NULL,
MB_OK | MB_ICONSTOP | MB_TOPMOST,
MACRO_ERROR_TITLE,
LS(STR_ERR_DLGKEYMACMGR5),
line,
szFuncName,
nArgs + 1,
cQuote
);
m_nReady = false;
nEnd = i - 1; // nEndは終わりの次の文字(')
break;
}
}
// Jun. 16, 2002 genta
if( !m_nReady ){
break;
}
CNativeW cmemWork;
cmemWork.SetString( strLine.c_str() + nBgn, nEnd - nBgn );
// 2014.01.28 「"\\'"」のような場合の不具合を修正
cmemWork.Replace( L"\\\\", L"\\\1" ); // 一時置換(最初に必要)
cmemWork.Replace( LTEXT("\\\'"), LTEXT("\'") );
// Jun. 16, 2002 genta double quotationもエスケープ解除
cmemWork.Replace( LTEXT("\\\""), LTEXT("\"") );
cmemWork.Replace( L"\\r", L"\r" );
cmemWork.Replace( L"\\n", L"\n" );
cmemWork.Replace( L"\\t", L"\t" );
{
// \uXXXX 置換
size_t nLen = cmemWork.GetStringLength();
size_t nBegin = 0;
const wchar_t* p = cmemWork.GetStringPtr();
CNativeW cmemTemp;
for( size_t n = 0; n < nLen; n++ ){
if( n + 1 < nLen && p[n] == L'\\' && p[n+1] == L'u' ){
size_t k;
for( k = n + 2; k < nLen && k < n + 2 + 4
&& (WCODE::Is09(p[k])
|| (L'a' <= p[k] && p[k] <= L'f')
|| (L'A' <= p[k] && p[k] <= L'F')); k++ ){
}
cmemTemp.AppendString( p + nBegin, n - nBegin );
nBegin = k;
if( 0 < k - n - 2 ){
wchar_t hex[5];
wcsncpy( hex, &p[n+2], k - n - 2 );
hex[k - n - 2] = L'\0';
wchar_t* pEnd = NULL;
wchar_t c = static_cast<wchar_t>(wcstol(hex, &pEnd, 16));
cmemTemp.AppendString( &c, 1 );
}
n = k - 1;