int i = 4;
string text = "Player ";
cout << (text + i);
Player 4
を出力してほしい。
上記は明らかに間違っていますが、ここで私がやろうとしていることを示しています。これを行う簡単な方法はありますか、または新しいインクルードを追加し始める必要がありますか?
C++ 11では、次のように記述できます。
#include <string> // to use std::string, std::to_string() and "+" operator acting on strings
int i = 4;
std::string text = "Player ";
text += std::to_string(i);
さて、coutを使用する場合は、次のように整数を直接書き込むことができます。
std::cout << text << i;
すべての種類のオブジェクトを文字列に変換するC++の方法は、 string streams です。便利なものがない場合は、作成してください。
#include <sstream>
std::ostringstream oss;
oss << text << i;
std::cout << oss.str();
または、整数を変換して文字列に追加することもできます。
oss << i;
text += oss.str();
最後に、Boostライブラリは boost::lexical_cast
を提供します。これは、組み込み型キャストのような構文で文字列変換をラップします。
#include <boost/lexical_cast.hpp>
text += boost::lexical_cast<std::string>(i);
これは逆の方法でも機能します。つまり、文字列を解析します。
printf("Player %d", i);
(あなたが好きなすべての答えに投票してください;私はまだC++ I/O演算子が嫌いです。)
:-P
これらは一般的な文字列に対して機能します(ファイル/コンソールに出力したくないが、後で使用するために保存するなど)。
boost.lexical_cast
MyStr += boost::lexical_cast<std::string>(MyInt);
文字列ストリーム
//sstream.h
std::stringstream Stream;
Stream.str(MyStr);
Stream << MyInt;
MyStr = Stream.str();
// If you're using a stream (for example, cout), rather than std::string
someStream << MyInt;
レコードの場合、実際に出力する前に文字列を作成する場合は、 std::stringstream
を使用することもできます。
cout << text << " " << i << endl;
あなたの例は、整数が続く文字列を表示したいことを示しているようです、その場合:
string text = "Player: ";
int i = 4;
cout << text << i << endl;
うまくいくでしょう。
しかし、文字列の場所を保存したり渡したりする場合、これを頻繁に行うと、加算演算子をオーバーロードすることでメリットが得られる場合があります。これを以下に示します。
#include <sstream>
#include <iostream>
using namespace std;
std::string operator+(std::string const &a, int b) {
std::ostringstream oss;
oss << a << b;
return oss.str();
}
int main() {
int i = 4;
string text = "Player: ";
cout << (text + i) << endl;
}
実際、テンプレートを使用してこのアプローチをより強力にすることができます。
template <class T>
std::string operator+(std::string const &a, const T &b){
std::ostringstream oss;
oss << a << b;
return oss.str();
}
これで、オブジェクトb
に定義されたストリーム出力がある限り、それを文字列(または、少なくともそのコピー)に追加できます。
別の可能性は Boost.Format :
#include <boost/format.hpp>
#include <iostream>
#include <string>
int main() {
int i = 4;
std::string text = "Player";
std::cout << boost::format("%1% %2%\n") % text % i;
}
ここに、前に必要だったいくつかのコードを含む、小さな実用的な変換/追加の例を示します。
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main(){
string str;
int i = 321;
std::stringstream ss;
ss << 123;
str = "/dev/video";
cout << str << endl;
cout << str << 456 << endl;
cout << str << i << endl;
str += ss.str();
cout << str << endl;
}
出力は次のようになります。
/dev/video
/dev/video456
/dev/video321
/dev/video123
最後の2行では、変更した文字列を実際に印刷する前に保存し、必要に応じて後で使用できることに注意してください。
レコードには、QtのQString
クラスを使用することもできます。
#include <QtCore/QString>
int i = 4;
QString qs = QString("Player %1").arg(i);
std::cout << qs.toLocal8bit().constData(); // prints "Player 4"
cout << "Player" << i ;
cout << text << i;
ここでの1つの方法は、問題で必要な場合に出力を直接印刷することです。
cout << text << i;
それ以外の場合、最も安全な方法の1つは
sprintf(count, "%d", i);
そして、それを「テキスト」文字列にコピーします。
for(k = 0; *(count + k); k++)
{
text += count[k];
}
したがって、必要な出力文字列があります
sprintf
の詳細については、以下を参照してください。 http://www.cplusplus.com/reference/cstdio/sprintf
cout << text << i;
Ostreamの<<
演算子は、ostreamへの参照を返すので、<<
操作をチェーンし続けることができます。つまり、上記は基本的に次と同じです。
cout << text;
cout << i;
cout << text << " " << i << endl;
また、プレーヤーの番号をstd::string::Push_back
と連結してみます:
コードの例:
int i = 4;
string text = "Player ";
text.Push_back(i + '0');
cout << text;
コンソールに表示されます:
プレイヤー4
これを理解する最も簡単な方法は次のとおりです。
単一文字列および文字列配列として機能します。文字列配列は複雑なので、文字列配列を検討しています(文字列は少し同じです)。名前の配列とappend整数とcharを作成して、文字列にintとcharsを簡単に追加できることを示します。それが役に立てば幸い。長さは配列のサイズを測定するためのものです。プログラミングに精通している場合、size_tは符号なしint
#include<iostream>
#include<string>
using namespace std;
int main() {
string names[] = { "amz","Waq","Mon","Sam","Has","Shak","GBy" }; //simple array
int length = sizeof(names) / sizeof(names[0]); //give you size of array
int id;
string append[7]; //as length is 7 just for sake of storing and printing output
for (size_t i = 0; i < length; i++) {
id = Rand() % 20000 + 2;
append[i] = names[i] + to_string(id);
}
for (size_t i = 0; i < length; i++) {
cout << append[i] << endl;
}
}