既存のコードをC++Builder 2009へ移植してして、文字列関連の処理の変更が大きいかもしれないことに気づいた。
AnsiString text = "あいうえお";
return text.AnsiPos("う");
C++Builder 2007では「5」を返すが、
C++Builder 2009では「3」を返す。
C++Builder 2007はバイト数で計算しているのに対し、
C++Builder 2009は文字数で計算している。
文字列関連の処理は、すべて見直しが必要かも…
2009年5月28日追記
Update3で修正されました。
C++Builder 2009 Update3では「5」を返します。
あくまでもAnsiStringベースで行くのなら、Delphi2009のAnsiStringsユニットのAnsiPosが使えると思います。
———————–
#include
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString text = “あいうえお”;
int idx = text.AnsiPos(“う”);
ShowMessage(IntToStr(idx)); // 3
idx = Ansistrings::AnsiPos(“う”, text);
ShowMessage(IntToStr(idx)); // 5
}
———————–
なるほど。
AnsiStrings.hppをincludeすると、関数がC++Builder2007と同じ動作になりますね。
勉強になります。
AnsiStrings.hppをincludeしないとき、
AnsiString text = “あいうえお”;
AnsiPos(“う”, text); //=> 3
AnsiStrings.hppをincludeするとき、
#include <AnsiStrings.hpp>
AnsiString text = “あいうえお”;
AnsiPos(“う”, text); //=> 5
> text.AnsiPos(“う”);
これが3になる件、出来ましたらQCへの登録をお願いいたします。
QCは英語ですよね。苦手なんです。
もし可能なら高橋様にQCの登録をお願いできないでしょうか。