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

解決


初心者  2008-04-09 19:20:05  No: 67990  IP: 192.*.*.*

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

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

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

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

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

編集 削除
επιστημη  URL  2008-04-09 21:47:10  No: 67991  IP: 192.*.*.*

> 人それぞれで。

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

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

それもまたよし。

編集 削除
夏みかん  2008-04-09 23:35:36  No: 67992  IP: 192.*.*.*

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

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

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

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

編集 削除
初心者  2008-04-10 11:09:57  No: 67993  IP: 192.*.*.*

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

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

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

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

編集 削除
επιστημη  URL  2008-04-10 11:37:50  No: 67994  IP: 192.*.*.*

ところで、

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

編集 削除
初心者  2008-04-10 12:00:30  No: 67995  IP: 192.*.*.*

επιστημηさん

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

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

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

stringだと・・・

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

編集 削除
επιστημη  URL  2008-04-10 13:51:52  No: 67996  IP: 192.*.*.*

> 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 14:40:47  No: 67997  IP: 192.*.*.*

お遊び。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-10 19:04:09  No: 67998  IP: 192.*.*.*

επιστημηさん

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

アキラさん

ありがとうございます。

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

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

編集 削除
アキラ  URL  2008-04-11 09:49:23  No: 67999  IP: 192.*.*.*

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

編集 削除
初心者  2008-04-11 11:57:23  No: 68000  IP: 192.*.*.*

アキラさん

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

編集 削除