- ベストアンサー
シフトJIS文字列の中から
(string str;) pos=str.find_last_of("「"); で2バイトさがそうとしても文字化けと同じように間違った文字を見つけてしまいます このシフト文字列対策はどうすればいいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 後ろのインデックスがほしいのでfind_last_ofのほうがいいのです find_last_of は引数に与えられた文字(この場合マルチバイトなので2文字)の'いずれか'を末尾から探します。 rfind は与えられた文字列の現れる位置を末尾から探します。 両者の違いはご理解いただけますか?
その他の回答 (2)
- sha-girl
- ベストアンサー率52% (430/816)
>なにか回避策は有りませんか? ワイド文字列(UNICODE)で使ってはどうですか? std::wstringというものがあります。 (wstring str;) pos=str.find_last_of(L"「"); http://www.doumo.jp/postgretips/tips.jsp?tips=18 ANSI→UNICODEに変換するには Windowsの場合は MultiByteToWideChar APIで変換できます。 http://www.doumo.jp/postgretips/tips.jsp?tips=67 gccの場合は setlocaleとmbtowcを使います。 http://f1.aaa.livedoor.jp/~pointc/log243.html
お礼
ありがとうございます おおがかりな改変になりますね 少し手を抜くならば 例えば"「"の後に必ず半角ブランクをいれる事にすれば検索ミスは無くなりますね?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
ドキュメントを読んでください。 find_last_of はあなたの望む振舞いではありません。 rfind はいかがですか? # いずれにせよ、std::stringはマルチバイト文字列の扱いは苦手です。
補足
ありがとうございます 後ろのインデックスがほしいのでfind_last_ofのほうがいいのです いずれにしても違う文字を見つけてしまうので困ってます バイト単位の並びが同じなので手のうち用がありません なにか回避策は有りませんか?
お礼
ありがとうございます まさかと思ってテストプログラムで確かめてみたらそうでした 不適切なサイトの説明をまにうけて思い込んでいたみたいです