0


1

ワイド文字列の先頭のスペースをスキップするには、クロスプラットフォームコードが必要です。 g(そしてQtは明らかに)はワイド文字列のスロットを初期化していないようですので、以下のコードはVCではうまくいきますが、gはbad_cast例外で失敗します:

#include #include #include

int main(){typedef std :: ctype vtct; std :: wstring str = L "1122"; const std :: wstring :: value_type * unspace = std :: use_facet(std :: locale :: classic()) scan_not(std :: ctype_base :: space | std :: ctype_base :: punct、str.c_str()、str.c_str()str.length()); // std :: cout << unspace << std :: endl; wprintf(L "{%s} \ n"、スペースなし); 0を返します。 }
spec:ロケールオブジェクトのファセットリポジトリに要求されたlocale

idのファセットが含まれていない場合の_ "bad_cast例外"

それで、一般的な質問はgがワイド文字列をどう扱うか? もっと細かい質問 - 少なくともctypeのためにファセットを初期化する方法?

更新:いくつかの実験の後、私はlinux gがワイド文字列のファセットを正しく初期化することを発見しました - それでコードは動作します。 明らかに説明されている問題は、ミングのみの場合の機能です。

2 Answer


1


MingGWを使っていますか? 安定版 wchar_tをサポートしていません

私はLinux上でgでC言語のワイド文字サポート(ファセットも)を問題なく使用しています。

私は自分のコードがMinGWで動作するようにナローキャラクタのみのコンパイルモードをサポートするようにしなければなりませんでした。


0


私は、STLローカライゼーションサポートを使用しないようにしています。

  • 複雑です

  • 私が言える限りでは、コンパイラサポートはそれほど良くありません。

    Qtについて言及したので、wstringからQStringを作成し、QChar

    isSpaceを使ってどの文字がスペースであるかを確認することができます。

Cローカライズの詳細については、http://www.cs.huji.ac.il/~etsman/Docs/gcc-3.4-base/libstdc /html/22_locale/howto.html [このリソース]を参照してください。 ローカライズに関するB.Stroustrupの付録へのリンクが含まれています。