前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0

13.1. 文字列クラス

BREW には、シングルバイト文字またはマルチバイト文字を表す char 型と、 BREW 独自の 2 バイト文字を表す AECHAR 型があります。 SophiaFramewok では、これら 2 種類の文字型をそれぞれ AChar 型、WChar 型として定義しています。

文字列を表すクラスには、AChar 型の文字で構成される SFXAnsiString と、 WChar 型の文字で構成される SFXWideString の 2 種類があります。

また、文字列を変換したり、種類を判定するための文字列処理クラスが 3 種類提供されています。

表 13.1. 文字列を表すクラス

クラス名 解説
SFXAnsiString AChar 型文字列を表すクラスです。
SFXWideString WChar 型文字列を表すクラスです。

表 13.2. 文字列処理クラス

クラス名 解説
SFXAscii ASCII 文字列特有の処理を行うクラスです。
SFXShiftJIS Shift_JIS エンコード文字列特有の処理を行うクラスです。
SFXTextEncoding 文字コード変換のためのクラスです。

例 13.1. 定義

SFXAnsiString str1("http://");
SFXAnsiString str2("www.s-cradle.com");
SFXAnsiString str3(str1);
SFXAnsiString str4;

変数 str1, str2, str3, str4 を文字列クラスのオブジェクトとして定義しています。

str1 は "http://"、str2 は "www.s-cradle.com" という文字列を表します。

str3 は str1 と同じ文字列 ( "http://" ) になります。

str4 は空の文字列です。

例 13.2. 連結

SFXAnsiString str1("http://");
SFXAnsiString str2("www.s-cradle.com");
SFXAnsiString str3;

// str3 は "http://www.s-cradle.com"
str3 = str1 + str2;

// str3 = "http://www.s-cradle.com/index.html" str3 += "/index.html";

例 13.3. 挿入 1

SFXAnsiString str3("http://www.s-cradle.com/index.html");
SFXAnsiString str4;

// str4 は "http://www.s-cradle.com/sophiaframework/index.html"
str4 = str3.Insert(23, "/sophiaframework");

例 13.4. 挿入 2

// 以下の方法でも同じ結果が得られる
SFXAnsiString str1("/sophiaframework");
SFXAnsiString str3("http://www.s-cradle.com/index.html");
SFXAnsiString str4;

// 引数を SFXAnsiString 型にしてもよい
str4 = str3.Insert(23, str1);
[Caution] 注意

str3 は変更されません。

例 13.5. 一部削除

SFXAnsiString str4("http://www.s-cradle.com/sophiaframework/index.html");

// str4 = "http://www.s-cradle.com/index.html"
str4 = str4.Remove(23, 39);

例 13.6. 全て削除

SFXAnsiString str4("http://www.s-cradle.com/index.html");

// str4 = "" ( 空文字列 )
str4.Clear();

例 13.7. 長さの取得

SFXAnsiString str4("http://www.s-cradle.com/index.html");

// length = 34
SInt32 length = str4.GetLengthCString();

  

例 13.8. 末尾の削除

SFXAnsiString str4("http://www.s-cradle.com/index.html");

// str4 の長さを取得する
SInt32 length = str4.GetLengthCString();

// str4 は "http://www.s-cradle.com"
str4 = str4.Remove(length - 11, length);

例 13.9. 代入( コピー )

SFXAnsiString str1;
SFXAnsiString str2("abc");
SFXAnsiString str3;

// str1 = "http://www.s-cradle.com"; 
str1 = "http://www.s-cradle.com";

// str3 = "abc"
str3 = str2;

例 13.10. 文字の get / set

SFXAnsiString str1("http://www.s-cradle.com/index1.html");

// character = '1' 
AChar character = str1[29];

// str1 の後半 = "index2.html" str1[29] = '2';

例 13.11. 部分抜き出し

SFXAnsiString str1("http://www.s-cradle.com/index.html");
SFXAnsiString str2;

// str2 = "www.s-cradle.com" 
str2 = str1.Substring(7, 23);

例 13.12. 検索

SFXAnsiString str1("http://www.s-cradle.com/index.html");

SInt32 i = str1.FirstIndexOf("//");   // i = 5
SInt32 j = str1.FirstIndexOf("~");    // ~ は無いので j = -1
SInt32 k = str1.FirstIndexOf("/", 7); // 7 文字目から探し始めるので  k = 23
SInt32 m = str1.LastIndexOf("/");     // m = 23

例 13.13. URL の編集

SFXAnsiString str1("http://www.s-cradle.com/index.html");

SInt32 m = str1.LastIndexOf("/"); // m = 23

// str1 は "http://www.s-cradle.com"
str1.Remove(m, str1.GetLength()); // 末尾を削除する

// str1 は "http://www.s-cradle.com/file.xml"
str1 += "/file.xml";

例 13.14. 置換

SFXAnsiString str3("x < y & y < z");

// すべての "<" を "&lt;" に置換する
str3 = str3.Replace("<", "&lt;");

// すべての "&" を "&amp;" に置換する
str3 = str3.Replace("&", "&amp;");

// 下記のように記述してもよい
// str3 = str3.Replace("<", "&lt;").Replace("&", "&amp;");

例 13.15. 比較

if (str1 == str2) {	
	// str1 と str2 が等しいとき
   	// 処理内容を記述する
}
if (str1 == "abc") {	
	// str1 が "abc" のとき
	// 処理内容を記述する
}
if (str1.Equals("abc", true)) {  
	// str1 が "abc" のとき( 大文字小文字は区別する )
	// 処理内容を記述する
}
if (str1.Equals("abc", false)) {	
	// str1 が "abc" のとき( 大文字小文字を区別しない )
	// 処理内容を記述する
}
if (str1.StartsWith("http://")) {	
	// str1 が "http://" で始まるとき
	// 処理内容を記述する
}

例 13.16. C 言語文字列 ( ポインター ) の取得

// ACharPtr 型を引数にとる関数
Void func(ACharPtr arg);

func(str1.GetCString());

例 13.17. デバッグ ウィンドウへの表示

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

例 13.18. 空文字列のチェック

// 例: SFXAnsiString を引数にとる関数
Void func(SFXAnsiString str) {
    if (str.IsEmpty()) { 
        // str が空文字列のとき
        return; // 何も処理しない
    }
    // 関数の本体の処理を記述する
}

例 13.19. 空白の削除

SFXAnsiString string = "   abc"; // string = "   abc"
// Trim() 関数は新しい文字列を返すので再代入する
string = string.Trim();          // string = "abc"

例 13.20. 書式出力 ( 整数 → 文字列の変換 )

// str4 = "255.255.0.0:8080"
// 書式は SPRINTF と同じ
str4 = SFXAnsiString::Format("%d.%d.%d.%d:%d", 255, 255, 0, 0, 8080);

例 13.21. 整数への変換

str1 = "10";

SInt32 value = str1.AsSInt32();  // value = 10

例 13.22. BREW インターフェースでの使い方

// ファイル名 str1 のファイルの情報を取得する
SFBFileMgrSmp fileMgr = SFBFileMgr::NewInstance();
fileMgr->GetInfo(str1);

図 13.1. 文字列の描画

文字列の描画

例 13.23. 文字列の描画

// SFXGraphics インスタンスを取得する
SFXGraphicsPtr graphics = SFXGraphics::GetInstance();
SFXAnsiString str("Hello World!");

// 文字列の描画 ( 第 2 引数で描画場所を指定する )
graphics->DrawText(str, SFXRectangle(0, 0, 200, 30));

例 13.24. 終了処理

// 終了処理は必要ありません