以前ヘッダファイルで質問したものですが、文字列について悩んでます。
文字列を操作する場合に、C++だと何パターンかやり方があると
思いますが、皆さまはどのように使い分けてますか?
char a;
std::string a;
std::stringstream a;
etc・・・
いろいろ調べてサンプルなどを見るのですが、人それぞれで。
多少手間でも全てchar型で作りたくなってしまいます。
> 人それぞれで。
それが正解。
あんなとき、こんなとき...を挙げていたらキリがありません。
> 多少手間でも全てchar型で作りたくなってしまいます。
それもまたよし。
> char a;
文字列処理の本質を理解できるので修行用にはうってつけ。
> std::string a;
> std::stringstream a;
手っ取り早く文字列を処理したいならこちらもお勧め。
文字列のサイズを気にしなくて良いから。
> 多少手間でも全てchar型で作りたくなってしまいます。
気持ち分かる。
結局は人それぞれだから自由に選択すればよい。
επιστημηさん
夏みかんさん
特に決まり的なものはないと言うことですね。
C++なのにchar使うなんて・・・・みたいな風潮があるかと
思ってました。
ありがとうございました。
ところで、
> 多少手間でも全てchar型で作りたくなってしまいます。
↑ナゼですか?
επιστημηさん
使い慣れてるからってだけですね。。お恥ずかしい。。
例えば、固定文字 + 数値データ(先頭0詰め) のような編集が必要な場合に
sprintf( a, "KOTEI:%02d", data);
的に書けると思うのですが
stringstreamだと
a << "KOTEI:" << data;(0詰めの方法がわからない・・・)
stringだと・・・
っていう感じで、1つ1つに調査時間がかかってしまい
できるだけC++手法を使いたいと考えてはいるのですが。
> 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;
}
お遊び。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;
}
επιστημηさん
おおぉぉー
なるほど!勉強になります。
混ぜて使っていくわけですね。
使いこなせるように頑張ります。
ありがとうございました。
アキラさん
ありがとうございます。
ちなみに以前からboostはちょっと気にはなっていたのですが
とても便利なライブラリたちですよね。
実際現場で使用しても良いんですかね。
あくまでも勉強用なのでしょうか。
開発現場だとけっこう
「フリーのライブラリなんて信用できないしライセンスとかよくわからないから使っちゃダメ」
って言われますね。
Boostは準標準といってもいいライブラリなのですが、なかなか受け入れてもらえないところが多いですね。
もちろん開発で使っているところもありますし
私のようにBoostのほしいものだけを自分で作って開発に使用している人もいます
http://d.hatena.ne.jp/faith_and_brave/20070910/1189423151
アキラさん
ですね。
私も実践では、受け入れられないというか、怖いという感じが
どうしても拭えないです。
アキラさんのように中身を理解して使用すれば問題ないと思いますけど。
せっかく公開されてる技術ですので、有効に活用したいと
思います。
ありがとうございました。
ツイート | ![]() |