2011-12-20 8 views
9

整数 - >文字列変換を行う方法は、インターネット上で何回も答えられています...しかし、私はこれを行うために最もコンパクトな "C++ - way"を探しています。C++での文字列変換/整数文字列連結の整数 - よりコンパクトなソリューション?

あなたが過負荷に+演算子を使用して文字列を連結することができるしているので、のpython-っぽい X =(stringVariable + STR(intVariable))連結の線に沿って何かを行うことができることが好ましいであろうが、 C++でこれを行う正規の方法があるかどうかわかりません。

私が見る最も一般的な解決策は以下のとおりです。

にstringstream:可能な場合は、それだけでいくつかの文字を連結するために、コードの3行(宣言、ストリームへの書き込み、文字列への変換)を持っていないいいだろうと数字。

itoa:これは動作しますが、標準的なC++ソリューションを探しています。また、私は間違っているかもしれないが、私はitoaは技術的に非標準だと思う。

ブースト形式/ブースト字句キャスト:これも機能しますが、この作業を行うバニラC++には何もありませんか?

+3

実際にはストリングストリームが機能することに注意してください。ヒント:(非)問題を発明しないでください。 :) – Kos

+1

@Kosちょうど私のペットピーブですが、ここで仕事をしている 'std :: ostringstream'です。 –

+0

@JamesKanze:実際にニックピックするには、変換の実際の仕事はostreamsの適切な 'operator <<'で行われます。 – PlasmaHH

答えて

17
#include <string> 

整数に文字列:文字列へint n = std::stoi(s);

整数:std::string s = std::to_string(n);

+0

まだまだ知られていない、もう一つの新機能です(正式には1年ではなく、一部のコンパイラーやコンパイラーのユーザーがまだ追いついていないかもしれませんが、言及する価値があります)。 – Kos

+0

@Kos:正式には3.5ヶ月です;)(2011-09-01) – PlasmaHH

+0

C++ 11では、自分のコードをよりメンテナンスに役立てています。うまくいけば、早期採用者であることは、コンパイラのサポート、会社のコーディング標準などの点で、私を噛み砕くために戻ってこないのです。 – daj

0

変換するための3行を持つ事は何ですか?いつでも同じタイプの連結を使用する必要がある場合は、それを関数に入れれば完了です。奇妙な解決法を使うよりも良いでしょう。

2

stringVariable + boost::lexical_cast<std::string>(intVariable)このトリックを行うだろうが、これは良い考えであるとは思わない。 Pythonでさえ、'{}{:6f}'.format(stringVariable, intVariable)のようなものはもっと普通です。

4

C++ 11にはが含まれていますが、C++ 03では「単一関数呼び出しソリューション」はありません。また、boost::lexical_cast(特定のケースに特化していますが)とstd::to_stringは最終的に変換する必要があるTについてはoperator<<(std::ostream&,T)となります。それは一般的に物事を扱うことができるということです。op<<が既にある場合は、それを再使用して文字列表現を作成してみましょう。

関連する問題