0

MBCS で std::string 関数を使用したことのある人はいますか? たとえば、CI でこれを行うことができます。

p = _mbsrchr(path, '\\');

しかし、C ++ではこれをやっています:

found = path.find_last_of('\\');

トレイル バイトがスラッシュの場合、find_last_of はトレイル バイトで停止しますか? std::wstring についても同じ質問です。

ある文字をすべて別の文字に置き換える必要がある場合、すべてのスラッシュをバックスラッシュに置き換えるにはどうすればよいでしょうか? 各文字のリード サロゲート バイトをチェックしてから、トレイルをスキップする必要がありますか? 現在、各wcharに対してこれを行っています:

if( *i == L'/' )
*i = L'\\';

ありがとう

編集: David が正しく指摘しているように、マルチバイト コードページを扱う場合には、対処すべきことが他にもあります。Microsoft は、バイト インデックスと MBCS を操作するために_mbclen を使用すると述べています。ANSI コードページで作業する場合、find_last_of を確実に使用できるようには見えません。

4

1 に答える 1

1

サロゲートペアについて特別なことをする必要はありません。サロゲートペアの半分である単一の16ビット文字ユニットは、非サロゲート文字ユニットになることもできません。

それで、

if( *i == L'/' )
    *i = L'\\';

完全に正しいです。

find_last_of同様に、で使用できますwstring

マルチバイトのANSIコードページの場合はさらに複雑になります。リードバイトとトレイルバイトの問題に対処する必要があります。マルチバイトのANSI日付を実際に処理する必要がある場合は、より妥当なエンコーディングに正規化することをお勧めします。

于 2012-05-19T19:52:09.687 に答える