プロが教えるわが家の防犯対策術!

BorlandC++ なら使えると思いますが、AnsiPosという関数があります。
n := AnsiPos('表題\一覧');
上の例でnが5になり、漢字コードの中の\は拾いません。

VisualC++ でこのような処理は、自前で作るしかないのでしょうか。

当然ですが、C++でstringのfindメソッドでは面倒を見てくれませんでした。
string str="表題\\一覧";
n = str.find("\\");
この例では、nが1になります。

ちなみにAnsiPosが使えるコンパイラであるFreePascalでも、期待した結果は得られませんでした。
(nが2になります。)

以上よろしくお願いします。

A 回答 (1件)

AnsiPosの仕様を知りませんが、VC++専用で良ければ、_mbsstrが使えそうです。



#include <mbstring.h>

int AnsiPos(const char *s1, const char *s2)
{
const unsigned char *p = _mbsstr((const unsigned char *)s1, (const unsigned char *)s2);
if (p) {
return p - (const unsigned char *)s1 + 1;
}
return 0;
}
    • good
    • 0
この回答へのお礼

深夜にもかかわらず、回答ありがとうございます。

_mbsstr ですか。文字列検索 strstr関数のマルチバイト版があったんですね。
それにしても、アドレス値の差分で文字位置を返すというのは、いかにもC言語らしいですね。

ところで私の例文が間違っていました。
n := AnsiPos('表題\一覧');
ではなく
n := AnsiPos('\', '表題\一覧');
でした。

さっそく、引数の順序を逆にして使わせていただきます。

お礼日時:2005/11/20 05:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!