ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング 逆引きコード集 : 文字列

C++ で作成されたBREW アプリで、文字列の処理を行う方法です。
SophiaFramework を用いています。

文字列を浮動小数点型の数値に変換する

文字列を浮動小数点に変換するには、SFXHelper::wstrtofloat 関数を使用します。

SFXWideString str = "1.234";  // 変換したい文字列
Float64 value = SFXHelper::wstrtofloat(str.GetCString());  // value = 1.234 となる

参照 SFXHelper::wstrtofloat

      

複数行描画の際の文字列の高さを取得

SFXGraphics::DrawString 関数で複数行描画する際に、必要な文字列の高さを取得するには、
SFXGraphics::MeasureString 関数を使用します。

// 幅を 100 としたときの描画に必要な高さ
SInt16 height = SFXGraphics::MeasureString(AEE_FONT_NORMAL,
    "very long long long long text", 100);

参照 SFXGraphics::DrawString | SFXGraphics::MeasureString

      

複数行の文字列の描画

複数行の文字列を描画するには、SFXGraphics::DrawString 関数を使用します。

SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

// 左上が (20, 20), 幅 100, 高さ 100 の長方形内に複数行で描画する
graphics->DrawString("very long long long long text",
                     SFXRectangle(20, 20, 100, 100));

graphics インスタンスについては グラフィックインターフェースの取得 を参照

参照 SFXGraphics::DrawString | SFXGraphics::GetInstance

      

文字列を描画する

文字列を描画するには、SFXGraphics::DrawText 関数、または
SFXGraphics::DrawString 関数を使用します。

SFXGraphics::DrawText は1行、SFXGraphics::DrawString は複数行の描画を行います。

SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

// "Hello World" 文字列を座標 (10, 20) に描画する
graphics->DrawText("Hello World", SFXGrid(10, 20));

// 左上が (20, 20), 幅 100, 高さ 100 の長方形内に複数行で描画する
graphics->DrawString("very long long long long text",
                     SFXRectangle(20, 20, 100, 100));

graphics インスタンスについては グラフィックインターフェースの取得 を参照

参照 SFXGraphics::DrawText | SFXGraphics::DrawString |
SFXGraphics::GetInstance

      

文字列の幅を取得

文字列の幅を取得するには、SFXGraphics::MeasureText 関数を使用します。

// 文字列 "abcd" の幅を取得する
SInt16 width = SFXGraphics::MeasureText(AEE_FONT_NORMAL, "abcd");

SInt16 fit;

// 文字列 "abcd" の幅を取得。最大幅を30 とする
// widthLimit には幅30に入りきる最大の文字列の幅が入る
// fit には最大の文字列の文字数が入る
SInt16 widthLimit = SFXGraphics::MeasureText(AEE_FONT_NORMAL, "abcd", 30, &fit);

グラフィック・オブジェクトを用いる場合

SFXGraphicsPtr graphics = SFXGraphics::GetInstance();
SInt16 width = graphics->MeasureText("abcd");

graphics インスタンスについては グラフィックインターフェースの取得 を参照

参照 SFXGraphics::MeasureText | SFXGraphics::GetInstance

      

文字列の高さを取得

文字列の高さを取得するには、SFXGraphics::GetFontHeight 関数を使用します。

SInt16 height = SFXGraphics::GetFontHeight(AEE_FONT_NORMAL);

グラフィック・オブジェクトを用いる場合

SFXGraphicsPtr graphics = SFXGraphics::GetInstance();
SInt16 height = graphics->GetFontHeight();

graphics インスタンスについては グラフィックインターフェースの取得 を参照

参照 SFXGraphics::GetFontHeight | SFXGraphics::GetInstance

      

ひらがな・カタカナの変換

ひらがな→カタカナの変換は SFXShiftJIS::HiraganaToKatakana 関数を使用します。
カタカナ→ひらがなの変換は SFXShiftJIS::KatakanaToHiragana 関数を使用します。
この関数はワイド文字列に対してのみ使えます。

ひらがな→カタカナ

SFXWideString str("あいうえお");

SFXShiftJIS::HiraganaToKatakana(&str);    // str = "アイウエオ"

カタカナ→ひらがな

SFXWideString str("アイウエオ");

SFXShiftJIS::KatakanaToHiragana(&str);    // str = "あいうえお"

参照 SFXShiftJIS::HiraganaToKatakana | SFXShiftJIS::KatakanaToHiragana

      

半角文字を全角文字に変換する

半角文字を全角文字に変換するには、SFXShiftJIS::ToFullXXX 関数を使用します。
この関数はワイド文字列に対してのみ使えます。

SFXShiftJIS::ToFullAlpha()     // 半角英字→全角
SFXShiftJIS::ToFullDigit()     // 半角数字→全角
SFXShiftJIS::ToFullKatakana()  // 半角カタカナ→全角
SFXShiftJIS::ToFullSymbol()    // 半角記号→全角

例:

SFXWideString str("AbcDefg");

SFXShiftJIS::ToFullAlpha(&str);    // str = "AbcDefg"

参照 SFXShiftJIS::ToFullAlpha | SFXShiftJIS::ToFullDigit |
SFXShiftJIS::ToFullKatakana | SFXShiftJIS::ToFullSymbol

      

全角文字を半角文字に変換する

全角文字を半角文字に変換するには、SFXShiftJIS::ToHalfXXX 関数を使用します。
この関数はワイド文字列に対してのみ使えます。

SFXShiftJIS::ToHalfAlpha()     // 全角英字→半角
SFXShiftJIS::ToHalfDigit()     // 全角数字→半角
SFXShiftJIS::ToHalfKatakana()  // 全角カタカナ→半角
SFXShiftJIS::ToHalfSymbol()    // 全角記号→半角

例:

SFXWideString str("AbcdEfg");

SFXShiftJIS::ToHalfAlpha(&str);    // str = "AbcdEfg"

参照 SFXShiftJIS::ToHalfAlpha | SFXShiftJIS::ToHalfDigit |
SFXShiftJIS::ToHalfKatakana | SFXShiftJIS::ToHalfSymbol

      

大文字小文字の変換

大文字→小文字の変換は
・文字の場合
 SFXAscii::AsLower 関数
・文字列の場合
 SFXAnsiString::AsLower 関数または
 SFXAnsiString::ToLower 関数
を使用します。

小文字→大文字の変換は
・文字の場合
 SFXAscii::AsUpper 関数
・文字列の場合
 SFXAnsiString::AsUpper 関数または
 SFXAnsiString::ToUpper 関数
を使用します。

大文字→小文字

AChar c = 'X';

AChar d = SFXAscii::AsLower(c);   // d = 'x' 
SFXAnsiString str("AbCdEfG123!");

str.ToLower();  // str = "abcdefg123!"

小文字→大文字

AChar c = 'y';

AChar d = SFXAscii::AsUpper(c);   // d = 'Y' 
SFXAnsiString str("AbCdEfG123!");

str.ToUpper();  // str = "ABCDEFG123!"

参照 SFXAscii::AsLower | SFXAscii::AsUpper | SFXAnsiString::AsLower | SFXAnsiString::ToLower |
SFXAnsiString::AsUpper | SFXAnsiString::ToUpper

      

部分文字列を取得する

文字列の切り出しを行うには、SFXAnsiString::Substring 関数を使用します。

元の文字列は変更されないことに注意してください。

SFXAnsiString str1 = "abcdefghijklmnop";
SFXAnsiString str2;
SInt32 i;

i = str1.GetLengthCString();          // i = 16
str2 = str1.Substring( 0, 3);         // str2 = "abc"
str2 = str1.Substring( 3, 8);         // str2 = "defghijk"
str2 = str1.Substring( i - 5, i);     // str2 = "lmnop"

参照 SFXAnsiString::Substring | SFXAnsiString::GetLengthCString

      

文字列を整数に変換する

文字列を整数に変換するには、SFXAnsiString::AsSInt32SFXAnsiString::AsUInt32 関数を使用します。

引数は変換に失敗した際、代入される数です。

SFXAnsiString str("-352");
SInt32 n;
UInt32 un;

n = str.AsSInt32(0);  // n は -352

str = "4000000000";
un = str.AsUInt32(0);  // un は 4000000000

str = "35xyz";
n = str.AsSInt32(0);  // n は 35

str = "72.847";
n = str.AsSInt32(0);  // n は 72

str = "xyz59";
n = str.AsSInt32(0);  // 変換失敗なので n は 0

参照 SFXAnsiString::AsSInt32 | SFXAnsiString::AsUInt32

      

整数を文字列に変換する

整数を文字列に変換するには、SFXAnsiString::Format 関数を使用します。

SInt32 n = -2459;

SFXAnsiString str = SFXAnsiString::Format("%d", n);  // str = "-2459" となる

参照 SFXAnsiString::Format

      

文字列クラスからC 言語文字列を取得する

文字列クラスからC 言語文字列を取得するには、SFXAnsiString::GetCString 関数を使用します。

SFXAnsiString str1 = "abc";

TRACE("%s", str1.GetCString());  // C 言語文字列(へのポインタ)を取得して
                                 // デバッグ ウィンドウに表示

ワイド文字列 (SFXWideString) の場合は、WChar のポインタ型が取得できます。

SFXWideString wide = "3.14159";

SFXHelper::wstrtofloat(wide.GetCString());  // WChar のポインタ型を引数に取る関数

SFXWideString を一度 SFXAnsiString に変換する方法もあります。

SFXWideString wide = "abc";

SFXAnsiString ansi(wide);  // SFXWideStringSFXAnsiString に変換

TRACE("%s", ansi.GetCString());  // C 言語文字列(へのポインタ)を取得して
                                 // デバッグ ウィンドウに表示

参照 SFXAnsiString::GetCString

      

文字列を空にする

文字列を空にするには、SFXAnsiString::Clear 関数を使用します。

SFXAnsiString str = "abc";

str.Clear();  // str = "" となる

参照 SFXAnsiString::Clear

      

文字の種類を判定する

文字の種類の判定には SFXAscii::Is* 関数を使用します。

次の種類があります。

IsAlpha        // 英文字であるか
IsAlphaDigit   // 英数字であるか
IsAscii        // ASCII 文字であるか
IsControl      // 制御文字であるか
IsDigit        // 数字であるか
IsGraph        // 図形文字であるか
IsHexDigit     // 16 進数で使用される文字か
IsLower        // 小文字であるか
IsPrint        // 印字可能文字であるか
IsPunct        // スペース、英字、数字以外の印字可能文字であるか
IsSpace        // 空白文字または改行文字であるか
IsUpper        // 大文字であるか

また、ShiftJIS 特有の文字判定関数として、SFXShiftJIS::Is* 関数があります。

次の種類があります。

IsFullAlpha      // 全角英字であるか
IsFullDigit      // 全角数字であるか
IsFullHiragana   // 全角ひらがなであるか
IsFullKatakana   // 全角カタカナであるか
IsFullSymbol     // 全角記号であるか
IsHalfAlpha      // 半角英字であるか
IsHalfDigit      // 半角数字であるか
IsHalfKatakana   // 半角カタカナであるか
IsHalfSymbol     // 半角記号であるか

使用例: SFXAscii::Is*

AChar c;  // WChar 型でもよい

if (SFXAscii::IsDigit(c)) {
   ...
}

使用例: SFXShiftJIS::Is*

WChar wc;  // AChar 型は不可

if (SFXShiftJIS::IsFullDigit(wc)) {
    ...
}

参照 SFXAscii::IsAlpha | SFXAscii::IsAlphaDigit | SFXAscii::IsAscii |
SFXAscii::IsControl | SFXAscii::IsDigit | SFXAscii::IsGraph |
SFXAscii::IsHexDigit | SFXAscii::IsLower | SFXAscii::IsPrint |
SFXAscii::IsPunct | SFXAscii::IsSpace | SFXAscii::IsUpper |
SFXShiftJIS::FullAlpha | SFXShiftJIS::FullDigit |
SFXShiftJIS::FullHiragana | SFXShiftJIS::FullKatakana |
SFXShiftJIS::FullSymbol | SFXShiftJIS::HalfAlpha |
SFXShiftJIS::HalfDigit | SFXShiftJIS::HalfKatakana |
SFXShiftJIS::HalfSymbol

      

文字列を検索する

文字列を検索するには、SFXAnsiString::FirstIndexOf 関数を使用します。
第二引数は検索開始位置です。

SFXAnsiString str1 = "SophiaCradleSophiaFramework";

SInt32 n1 = str1.FirstIndexOf("Sophia");              // n1 == 0
SInt32 n2 = str1.FirstIndexOf("Sophia", 1);           // n2 == 12

文字列の後ろから検索する場合は SFXAnsiString::LastIndexOf 関数を使用します。

SFXAnsiString str1 = "SophiaCradleSophiaFramework";

SInt32 n3 = str1.LastIndexOf("Sophia");          // n3 == 12
SInt32 n4 = str1.LastIndexOf("Sophia", 10);      // n4 == 0

参照 SFXAnsiString::FirstIndexOf | SFXAnsiString::LastIndexOf

      

文字列の途中、末尾に文字(列)を挿入、追加する

文字列の途中に文字(列)を挿入するには、SFXAnsiString::Insert 関数を使用します。
元の文字列は変更されないことに注意してください。

SFXAnsiString string1("abcdefg");
SFXAnsiString string2("XYZ");
SFXAnsiString string3;

string3 = string1.Insert(5, string2); // string1 = "abcdefg", string2 = "XYZ",
                                      // string3 = "abcdeXYZfg"  となる
string3 = string3.Insert(3, "###");   // string3 = "abc###deXYZfg"
string3 = string3.Insert(1, '@');     // string3 = "a@bc###deXYZfg"

末尾への追加は += 演算子を使用します。

SFXAnsiString string1("abc");
SFXAnsiString string2("defg");

string1 += string2;             // string1 = "abcdefg", string2 = "defg"

Add 関数または << 演算子でも同じ効果が得られます。

参照 SFXAnsiString::Insert | SFXAnsiString::operator+= | SFXAnsiString::Add |
SFXAnsiString::operator<<

      

デバッグウィンドウに文字列を表示する

エミュレータ使用時のみデバッグウィンドウに文字列を表示するには、
TRACE マクロを使用します。
SFXAnsiStringSFXWideString 文字列を表示する場合は、一度 C 言語型文字列に
変換してから TRACE マクロに文字列を渡します。

SFXAnsiString str;

TRACE("%s", str.GetCString());

SFXWideString を表示する場合には、一度 SFXAnsiString に変換します。

SFXWideString str;

TRACE("%s", SFXAnsiString(str).GetCString());

参照 TRACE | SFXAnsiString::GetCString

      

文字列を比較する

文字列を比較するには、SFXAnsiString::Compare 関数を使用します。
大文字と小文字を区別しない場合は第二引数を false とします。

SFXAnsiString str1 = "abc";
SFXAnsiString str2 = "def";
SFXAnsiString str3 = "ABC";
SInt32 c;

c = str1.Compare(str2);          // c は負
c = str1.Compare(str3);          // c は正
c = str1.Compare(str3, false);   // c は0

参照 SFXAnsiString::Compare

      

文字列が等しいか調べる

二つの文字列が等しいかを調べるには、 == 演算子を使用します。

SFXAnsiString str1 = "abc";
SFXAnsiString str2 = "def";

if (str1 == str2) {
    // 等しい
} else {
    // 等しくない
}

SFXAnsiString::Equals 関数を使用することもできます。

SFXAnsiString str1 = "abc";

if (str1.Equals("def")) {
    // 等しい
} else {
    // 等しくない
}

参照 SFXAnsiString::operator== | SFXAnsiString::Equals

      

浮動小数点型の数値を文字列に変換する

浮動小数点型の数値を文字列に変換するには、SFXHelper::floattowstr 関数を使用します。
変換後、空白部分(0x20) が残るので SFXAnsiString::Trim 関数にて削除します。

Float64 x = 3.14159;  // 変換対象の変数. Float32 でも可
WChar buf[30];  

SFXHelper::floattowstr(x, buf, sizeof(buf));  // buf = "     3.14159" となる

SFXAnsiString string; // 文字列を代入する変数

// 空白部分(0x20)削除
string = buf;
string = string.Trim();

参照 SFXHelper::floattowstr