web-dev-qa-db-ja.com

C ++:文字列の作成方法/ char *

私はC++を初めて使用します。 char*を作りたいのですが、方法がわかりません。
In Javaこれだけですか:

int player = 0;
int cpu = 0;
String s = "You: " + player + " CPU: " + cpu;

これどうやってするの? char*が必要です。

文字列の後に整数を貼り付けることに重点を置いています。

8

あなたがそれを助けることができればあなたはほぼ間違いなくchar *を扱いたくないでしょう-あなたはC++ std :: stringクラスが必要です:

#include <string>
..
string name = "fred";

または関連するstringstreamクラス:

#include <sstream>
#include <string>
#include <iostream>
using namespace std;

int main() {

  int player = 0;
  int cpu = 0;

  ostringstream os;
  os << "You: " << player << " CPU: " << cpu;
  string s = os.str();
  cout << s << endl;
}

文字ポインタが本当に必要な場合(そして、なぜそう思うのかまだ述べていない場合)、c_str()メンバー関数を使用して文字列から文字ポインタを取得できます。

これはすべて、C++の入門教科書でカバーする必要があります。まだ購入していない場合は、 Accelerated C++ を取得してください。インターネットリソースだけからC++を学ぶことはできません。

34
anon

C++を使用している場合は、std::stringを使用してください。 char*を使用している場合は、Cを直接使用することをお勧めします。 Cの場合、sprintf関数を使用できます。

char* s = // initialized properly
sprintf( s, "You: %d CPU: %d", player, cpu );
7
Rupert Jones

s.c_str( );. Here を呼び出すだけで、詳細を確認できます。

PS。 strcpyを使用してコンテンツを新しい変数にコピーすると、コンテンツを変更できます。

2
Artem Barger

char *は「文字へのポインタ」を意味します。

次のように「文字列」へのポインタを作成できます。

char* myString = "My long string";

または、std :: string:を使用することもできます。

std::string myStdString("Another long string");
const char* myStdString.c_str();

最後の例の最初にあるconstに注意してください。これは、ポイントされている文字を変更できないことを意味します。最初の例でも同じことができます。

const char* = "My long string";
1
Seb Rose

Stringstreamの使用を検討してください。

#include <iostream>
#include <sstream>

using namespace std;
int main ()
{
    int i = 10;

    stringstream t;

    t << "test " << i;

    cout << t.str();
}
0
IVlad

あなたが示すように、C++が「+」演算子をオーバーロードしていたならおそらく最高だったでしょう。悲しいことに、彼らはそうしませんでした(あなたが望むなら、あなたはそうすることができます)。

C++で整数変数を文字列に変換するには、基本的に3つの方法があります。 2つはCから継承され、1つはC++用に新しいものです。

  1. itoa() ルーチン。これは実際には非標準ですが、ほとんどのコンパイラにはあります。それの良いところは、文字列へのポインタを返すので、関数型プログラミングで使用できることです。
  2. sprintf() 。 Cからの2番目のホールドオーバーであるこのルーチンは、宛先文字列、フォーマット文字列、およびパラメーターのリストを受け取ります。パラメータの数とその解釈方法は、「フォーマット」文字列の解析方法によって異なります。これにより、sprintfは非常に強力で非常に危険です。このアプローチを使用する場合、最初の数回の試行でクラッシュバグが発生することをほぼ保証できます。
  3. std :: ostringstream 。 C++の方法。これはsprintf()のほとんどすべての機能を備えていますが、はるかに安全です。ここでの欠点は、それを宣言する必要があり、それがnot文字列であるため、完了したらそれを1つに変換する必要があることです。つまり、ostringstreamで何かを実行するには、少なくとも3行のコードが必要です。また、特に特別なフォーマットを試してみると、本当に醜いです。
0
T.E.D.