c++ builder XE4, 10.2 Tokyo > String > ToCharArray() / Split() [csharpの真似]
11554 ワード
動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
http://qiita.com/7of9/items/e03083db57cb5cb77ef8
にて muroさんに教えていただいたC#での ToCharArray() と Split()をC++ Builderでも実装できないか試した。
#include <memory>
static bool ToCharArray(String srcStr, TStringList *dstSL)
{
if (dstSL == NULL) {
return false;
}
String code;
for(int idx=1; idx <= srcStr.Length(); idx++) {
code = srcStr.SubString(idx, 1);
dstSL->Add(code);
}
return true;
}
static bool Split(String srcStr, TStringList *sepSL, TStringList *dstSL)
{
if (sepSL == NULL || dstSL == NULL) {
return false;
}
String res = L"";
String code;
bool isDelimiter;
for(int idx=1; idx <= srcStr.Length(); idx++) {
code = srcStr.SubString(idx, 1);
isDelimiter = false;
for(int si=0; si < sepSL->Count; si++) {
if (code == sepSL->Strings[si]) {
isDelimiter = true;
break;
}
}
if (isDelimiter) {
OutputDebugString(res.c_str());
if (res.Length() > 0) {
dstSL->Add(res);
res = L"";
}
} else {
res = res + code;
}
}
if (res.Length() > 0) {
dstSL->Add(res);
OutputDebugString(res.c_str());
}
return true;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
String separators = L",{:}";
String sample = L"{\"AAA\":{\"bbb\",\"ccc\"},\"ddd\"";
std::unique_ptr<TStringList> separator(new TStringList);
std::unique_ptr<TStringList> element(new TStringList);
bool res;
res = ToCharArray( separators, separator.get() );
if (res == false) {
return;
}
res = Split( sample, separator.get(), element.get() );
if (res == false) {
return;
}
for(int idx=0; idx < element->Count; idx++) {
Memo1->Lines->Add(element->Strings[idx]);
}
}
結果
"AAA"
"bbb"
"ccc"
"ddd"
Author And Source
この問題について(c++ builder XE4, 10.2 Tokyo > String > ToCharArray() / Split() [csharpの真似]), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/306ba9d131b482f9a79a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .