C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: C++でのStringについて


(過去ログ 82 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■48815 / inTopicNo.1)  C++でのStringについて
  
□投稿者/ yuka (3回)-(2010/04/14(Wed) 22:38:24)

分類:[.NET 全般] 

お世話になっております。
yukaと申します。
C++で文字列を扱う場合、皆さんがどのようなクラスを使用しているかお伺いしたく投稿致しました。

現在私はstr::stringを使用しているのですが、findで}を検索した場合、2byte文字の漢字を誤認して値を返してしまったりと日本語に優しくない気がしました。
(図書館とかを}でfindするとヒットしてしまいます。)

そこで日本語に対応しているお勧めな文字列クラスなどありませんでしょうか。
CStringやstd::stringなどは試してみました。

ご教授下されば嬉しいです。
よろしくお願いします。
引用返信 編集キー/
■48816 / inTopicNo.2)  Re[1]: C++でのStringについて
□投稿者/ やんち (6回)-(2010/04/14(Wed) 22:52:36)
最近は、std::wstring 使ってますね。
引用返信 編集キー/
■48817 / inTopicNo.3)  Re[1]: C++でのStringについて
□投稿者/ 774RR (496回)-(2010/04/14(Wed) 22:57:18)
漢字というか、マルチバイト文字コードというか、を取り扱う場合には
文字集合とエンコーディングを決めてからでないと具体的実装論に移行できない。

とりあえず現時点では文字集合は UNICODE でいいと思うのだけど
エンコーディングはいささか議論の余地が残るところで
特に Windows では、いろいろと妥協の上で UTF-16 を使わざるを得ないのが現実かな・・・

となると std::wstring が一番面倒が無いような気がする。
引用返信 編集キー/
■48820 / inTopicNo.4)  Re[2]: C++でのStringについて
□投稿者/ yuka (4回)-(2010/04/14(Wed) 23:33:34)
早速のご返答ありがとうございます!
std::wstringは実は存在しか知りませんでした。(難しいという話を聞いていましたので・・・)
きちんと仕様を調べてみようと思います。
やんちさん、775RRさん、ありがとうございました。
引用返信 編集キー/
■48831 / inTopicNo.5)  Re[3]: C++でのStringについて
□投稿者/ επιστημη (2479回)-(2010/04/15(Thu) 08:41:35)
επιστημη さんの Web サイト
2010/04/15(Thu) 08:43:07 編集(投稿者)
ご参考。{ と } に囲まれた部分文字列を抽出

#include <iostream>
#include <string>
#include <locale>

using namespace std;

int main() {
  wcout.imbue(locale("japanese"));
  wstring str = L"図書館{としょかん}";
  wstring::size_type bpos, epos;
  if ( (bpos = str.find(L'{'))      != wstring::npos 
    && (epos = str.find(L'}',bpos)) != wstring::npos ) {
    wcout << L'「' << str.substr(bpos+1,epos-bpos-1) << L"」\n";
  }
}

引用返信 編集キー/
■48834 / inTopicNo.6)  Re[3]: C++でのStringについて
□投稿者/ みきぬ (863回)-(2010/04/15(Thu) 10:33:06)
No48820 (yuka さん) に返信
> やんちさん、775RRさん、ありがとうございました。

> 775RRさん

おしい、1番違い。
引用返信 編集キー/
■48898 / inTopicNo.7)  Re[4]: C++でのStringについて
□投稿者/ yuka (5回)-(2010/04/15(Thu) 23:41:27)
お返事ありがとうございました。
仕事帰りでお返事がお礼が遅くなり申し訳ありません。

>επιστημηさん
wstringはそのようにして検索が出来るのですね。
とても勉強になりました。
ありがとうございます。

>774Rさん
大変失礼致しました!
寝ぼけ眼で返事をしたのが失敗でした・・・。
教えてくださったのに本当に申し訳ありません。
引用返信 編集キー/
■48902 / inTopicNo.8)  Re[5]: C++でのStringについて
□投稿者/ Jitta on the way (610回)-(2010/04/16(Fri) 07:37:41)
No48898 (yuka さん) に返信

> >774Rさん
> 大変失礼致しました!
> 寝ぼけ眼で返事をしたのが失敗でした・・・。

じゃ、もう一回。
R はふたつね。
引用返信 編集キー/
■48905 / inTopicNo.9)  Re[5]: C++でのStringについて
□投稿者/ επιστημη (2482回)-(2010/04/16(Fri) 09:07:20)
επιστημη さんの Web サイト
> wstringはそのようにして検索が出来るのですね。

凝った検索なら正規表現使えます。

// { と } で囲まれた部分文字列を列挙する by VC++10 (VS2010)
#include <iostream>
#include <string>
#include <locale>
#include <regex>

namespace std { using namespace std::tr1; } // VC++9対応
using namespace std;

int main() {
  wcout.imbue(locale("japanese"));
  wstring str = L"{図書館}{としょかん}"; // 検索対象
  wregex re(L"\\{([^\\{\\}]+)\\}"); // 正規表現
  wsregex_iterator iter( str.begin(), str.end(), re);
  wsregex_iterator last;
  while ( iter != last ) {
    wcout << iter->str(1) << endl;
    ++iter;
  }
}

引用返信 編集キー/
■48946 / inTopicNo.10)  Re[6]: C++でのStringについて
□投稿者/ yuka (6回)-(2010/04/17(Sat) 12:16:36)
もう御免なさいとしかいいようがないですね・・・。
重ね重ね申し訳ありませんでした。

>επιστημηさん
正規表現もどう実装しようか悩んでいたのでとても嬉しいです。
C#なら簡単なのですが、C++で自分で組むと少し大変かなって思っていましたので。
ありがとうございました!
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -