文字列操作の一般的な方法とは?

解決


初心者  2008-04-10 04:20:05  No: 67990

以前ヘッダファイルで質問したものですが、文字列について悩んでます。

文字列を操作する場合に、C++だと何パターンかやり方があると
思いますが、皆さまはどのように使い分けてますか?

char a;
std::string a;
std::stringstream a;
etc・・・

いろいろ調べてサンプルなどを見るのですが、人それぞれで。

多少手間でも全てchar型で作りたくなってしまいます。


επιστημη  URL  2008-04-10 06:47:10  No: 67991

> 人それぞれで。

それが正解。
あんなとき、こんなとき...を挙げていたらキリがありません。

> 多少手間でも全てchar型で作りたくなってしまいます。

それもまたよし。


夏みかん  2008-04-10 08:35:36  No: 67992

> char a;
文字列処理の本質を理解できるので修行用にはうってつけ。

> std::string a;
> std::stringstream a;
手っ取り早く文字列を処理したいならこちらもお勧め。
文字列のサイズを気にしなくて良いから。

> 多少手間でも全てchar型で作りたくなってしまいます。
気持ち分かる。

結局は人それぞれだから自由に選択すればよい。


初心者  2008-04-10 20:09:57  No: 67993

επιστημηさん
夏みかんさん

特に決まり的なものはないと言うことですね。

C++なのにchar使うなんて・・・・みたいな風潮があるかと
思ってました。

ありがとうございました。


επιστημη  URL  2008-04-10 20:37:50  No: 67994

ところで、

> 多少手間でも全てchar型で作りたくなってしまいます。
↑ナゼですか?


初心者  2008-04-10 21:00:30  No: 67995

επιστημηさん

使い慣れてるからってだけですね。。お恥ずかしい。。

例えば、固定文字 + 数値データ(先頭0詰め) のような編集が必要な場合に
sprintf( a, "KOTEI:%02d", data);
的に書けると思うのですが

stringstreamだと
a << "KOTEI:" << data;(0詰めの方法がわからない・・・)

stringだと・・・

っていう感じで、1つ1つに調査時間がかかってしまい
できるだけC++手法を使いたいと考えてはいるのですが。


επιστημη  URL  2008-04-10 22:51:52  No: 67996

> sprintf( a, "KOTEI:%02d", data);
> 的に書けると思うのですが

僕ならハイブリッド方式。

#include <cstdarg>
#include <cstring>
#include <string>

std::string form(const char* format, ...) {
  char buf[512];
  va_list args;
  va_start(args,format);
  vsprintf(buf, format, args);
  return buf;
}

#include <iostream>

int main() {
  int data = 123;
  std::cout << form("KOTEI:%02d", data) << std::endl;
}


アキラ  URL  2008-04-10 23:40:47  No: 67997

お遊び。Boost.Format

#include <iostream>
#include <string>
#include <boost/format.hpp>

int main()
{
  std::string str = (boost::format("%05d %s") % 3 % "abc").str();
  std::cout << str << std::endl;

  return 0;
}


初心者  2008-04-11 04:04:09  No: 67998

επιστημηさん

おおぉぉー
なるほど!勉強になります。
混ぜて使っていくわけですね。
使いこなせるように頑張ります。
ありがとうございました。

アキラさん

ありがとうございます。

ちなみに以前からboostはちょっと気にはなっていたのですが
とても便利なライブラリたちですよね。

実際現場で使用しても良いんですかね。
あくまでも勉強用なのでしょうか。


アキラ  URL  2008-04-11 18:49:23  No: 67999

開発現場だとけっこう
「フリーのライブラリなんて信用できないしライセンスとかよくわからないから使っちゃダメ」
って言われますね。
Boostは準標準といってもいいライブラリなのですが、なかなか受け入れてもらえないところが多いですね。
もちろん開発で使っているところもありますし
私のようにBoostのほしいものだけを自分で作って開発に使用している人もいます
http://d.hatena.ne.jp/faith_and_brave/20070910/1189423151


初心者  2008-04-11 20:57:23  No: 68000

アキラさん

ですね。
私も実践では、受け入れられないというか、怖いという感じが
どうしても拭えないです。
アキラさんのように中身を理解して使用すれば問題ないと思いますけど。
せっかく公開されてる技術ですので、有効に活用したいと
思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加