Windows Runtime Cpp 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列の比較 WindowsCompareStringOrdinal(関数)) |
(→文字列の比較 WindowsCompareStringOrdinal(関数)) |
||
861行: | 861行: | ||
*'''WindowsCompareStringOrdinal(HSTRING型変数,HSTRING型変数,INT32型ポインタ変数);''' | *'''WindowsCompareStringOrdinal(HSTRING型変数,HSTRING型変数,INT32型ポインタ変数);''' | ||
+ | |||
+ | 引数: | ||
+ | :'''第1引数''':文字列値を比較したいHSTRING文字列変数を付与する。サンプルでは55行目で使われていて、引数はhStr1となっています。 | ||
+ | :'''第2引数''':文字列値を比較したいHSTRING文字列変数を付与する。サンプルでは55行目で使われていて、引数はhStr2となっています。 | ||
+ | :'''第3引数''':第1引数と第2引数で指定した文字列同士を比較して、比較の結果をINT32型のポインタ変数(アドレス変数)を付与する。サンプルでは55行目で使われていて、引数は&INT32CompResultとなっています。第一引数の文字列と第二引数の文字列の比較の結果、現在指定されているLOCALEに基づいた辞書順で1つの目の方が辞書順で小さい場合は-1,同等値(完全一致)なら0,大きい場合は1がポインタの実体値として設定されます。 | ||
+ | |||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | #include <locale.h> | ||
+ | #include <wchar.h> | ||
+ | #include <stdio.h> | ||
+ | #include <crtdbg.h> | ||
+ | #include <roapi.h> | ||
+ | #include <winstring.h> | ||
+ | |||
+ | |||
+ | int main() { | ||
+ | HRESULT hr; | ||
+ | setlocale(LC_ALL, ""); | ||
+ | |||
+ | hr = RoInitialize(RO_INIT_TYPE::RO_INIT_MULTITHREADED); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"初期化に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"初期化に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | HSTRING hStr1, hStr2; | ||
+ | INT32 i32CompResult; | ||
+ | const wchar_t *cStr1 = L"あきたけん"; | ||
+ | const wchar_t *cStr2 = L"おおさかふ"; | ||
+ | size_t length = wcslen(cStr1); | ||
+ | |||
+ | length = wcslen(cStr1); | ||
+ | hr = WindowsCreateString(cStr1, length, &hStr1); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr1文字列の生成に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr1文字列の生成に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | length = wcslen(cStr2); | ||
+ | hr = WindowsCreateString(cStr2, length, &hStr2); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr2文字列の生成に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr2文字列の生成に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | wprintf_s(L"文字列1 =%s\n", WindowsGetStringRawBuffer(hStr1, nullptr)); | ||
+ | wprintf_s(L"文字列2 =%s\n", WindowsGetStringRawBuffer(hStr2, nullptr)); | ||
+ | wprintf_s(L"hStr1_Address=%p, hStr2_Address=%p\n", hStr1, &hStr2); | ||
+ | |||
+ | hr = WindowsCompareStringOrdinal(hStr1, hStr2, &i32CompResult); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"文字列の比較に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"文字列の比較に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | wprintf_s(L"\n"); | ||
+ | wprintf_s(L"比較結果 =%d\n", i32CompResult); | ||
+ | |||
+ | hr = WindowsDeleteString(hStr2); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr2文字列の削除に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr2文字列の削除に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | hr = WindowsDeleteString(hStr1); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr1文字列の削除に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr1文字列の削除に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | RoUninitialize(); | ||
+ | |||
+ | _wsystem(L"pause"); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 実行結果の出力結果 | ||
+ | 初期化に成功しました。 | ||
+ | hStr1文字列の生成に成功しました。 | ||
+ | hStr2文字列の生成に成功しました。 | ||
+ | 文字列1 =あきたけん | ||
+ | 文字列2 =おおさかふ | ||
+ | hStr1_Address=0023B778, hStr2_Address=00CFFB60 | ||
+ | 文字列の比較に成功しました。 | ||
+ | |||
+ | 比較結果 =-1 | ||
+ | hStr2文字列の削除に成功しました。 | ||
+ | hStr1文字列の削除に成功しました。 | ||
+ | 続行するには何かキーを押してください . . . | ||
+ | |||
+ | |||
+ | == '''文字列のNULL値確認 WindowsStringHasEmbeddedNull(関数)''' == | ||
+ | 2つのHSTRING型文字列同士を比較する関数です。まずは使い方に関する説明とサンプルと動作結果を示します。 | ||
+ | |||
+ | *'''WindowsStringHasEmbeddedNull(HSTRING型変数,HSTRING型変数,INT32型ポインタ変数);''' | ||
引数: | 引数: |