文字列を浮動小数点型の数値に変換する
文字列を浮動小数点に変換するには、SFXHelper::wstrtofloat 関数を使用します。
SFXWideString str = "1.234"; // 変換したい文字列 Float64 value = SFXHelper::wstrtofloat(str.GetCString()); // value = 1.234 となる
C++ で作成されたBREW アプリで、文字列の処理を行う方法です。
SophiaFramework を用いています。
文字列を浮動小数点に変換するには、SFXHelper::wstrtofloat 関数を使用します。
SFXWideString str = "1.234"; // 変換したい文字列 Float64 value = SFXHelper::wstrtofloat(str.GetCString()); // value = 1.234 となる
SFXGraphics::DrawString 関数で複数行描画する際に、必要な文字列の高さを取得するには、
SFXGraphics::MeasureString 関数を使用します。
// 幅を 100 としたときの描画に必要な高さ SInt16 height = SFXGraphics::MeasureString(AEE_FONT_NORMAL, "very long long long long text", 100);
複数行の文字列を描画するには、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::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::GetFontHeight 関数を使用します。
SInt16 height = SFXGraphics::GetFontHeight(AEE_FONT_NORMAL);
グラフィック・オブジェクトを用いる場合
SFXGraphicsPtr graphics = SFXGraphics::GetInstance(); SInt16 height = graphics->GetFontHeight();
graphics インスタンスについては グラフィックインターフェースの取得 を参照
ひらがな→カタカナの変換は 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::AsSInt32、SFXAnsiString::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::Format 関数を使用します。
SInt32 n = -2459; SFXAnsiString str = SFXAnsiString::Format("%d", n); // str = "-2459" となる
文字列クラスから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); // SFXWideString を SFXAnsiString に変換 TRACE("%s", ansi.GetCString()); // C 言語文字列(へのポインタ)を取得して // デバッグ ウィンドウに表示
文字列を空にするには、SFXAnsiString::Clear 関数を使用します。
SFXAnsiString str = "abc"; str.Clear(); // str = "" となる
文字の種類の判定には 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::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 マクロを使用します。
SFXAnsiString や SFXWideString 文字列を表示する場合は、一度 C 言語型文字列に
変換してから TRACE マクロに文字列を渡します。
SFXAnsiString str; TRACE("%s", str.GetCString());
SFXWideString を表示する場合には、一度 SFXAnsiString に変換します。
SFXWideString str; TRACE("%s", SFXAnsiString(str).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 str1 = "abc"; SFXAnsiString str2 = "def"; if (str1 == str2) { // 等しい } else { // 等しくない }
SFXAnsiString::Equals 関数を使用することもできます。
SFXAnsiString str1 = "abc"; if (str1.Equals("def")) { // 等しい } else { // 等しくない }
浮動小数点型の数値を文字列に変換するには、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();