2017-01-11 8 views
-2

文字列に「リーダーボード」を作成したい。これは可能ですか?私はこのコードを持っているが、それは仕事をdoesnの `t ..複数行の文字列を作成する

string leaderBoard; 
leaderBoard.resize(1024); 
leaderBoard.clear(); 

for (unsigned contor = 0; contor < myPlayer->getPlayerRoom()->playersInRoom.size(); ++contor){ 
    leaderBoard += myPlayer->getPlayerRoom()->playersInRoom.at(contor)->getPlayerName(); 
    leaderBoard += "-----"; 
    leaderBoard += to_string(myPlayer->getPlayerRoom()->playersInRoom.at(contor)->getPlayerScore()); 
    leaderBoard += '\n'; 
} 

それが唯一のプレイヤー名(最初の行)、私のリーダーボードに入れ、他の線はちょうどdoesnの` t私の文字列には、何も変更します。 文字列に「リーダーボード」を作成することは可能ですか?私はソケットを介してこの文字列をクライアントに渡す必要があるので、これを実行したい。

PS:最終文字列は3行にする必要があります。

+1

「これはうまくいきません」ここの質問では決して言わないでください。あなたが望むもの、そしてあなたのコードがあなたが望むことをしない理由を説明してください。 –

+2

[mcve] – NathanOliver

+0

を含むようにコードを編集してください*他の行は文字列に何も変更されません* - そうです、あなたの考え方ではありません。 'resize()'の代わりに 'reserve()'を使う必要があります。そして、 'clear()'は冗長です。 "*私はソケットを通してこの文字列をクライアントに渡す必要があります。" - あなたを止めるのは何ですか?あなたの通信プロトコルがすべてテキストベースで始まる場合を除いて、改行で区切られた文字列はリーダーボードを送信するための最良の選択である必要はありません。それ以外の場合は、プレーヤ数、文字列の長さ、スコアなどの整数を使用するバイナリのシリアル化形式が適しています。 –

答えて

1

これにはstd :: stringstreamを使用できます。

#include <sstream> 
#include <string> 

std::string leaderBoard; 
std::stringstream sstream; 

for (unsigned contor = 0; contor < myPlayer->getPlayerRoom()->playersInRoom.size(); ++contor) 
{ 
    sstream << myPlayer->getPlayerRoom()->playersInRoom.at(contor)->getPlayerName(); 
    sstream << "-----"; 
    sstream << to_string(myPlayer->getPlayerRoom()->playersInRoom.at(contor)->getPlayerScore()); 
    sstream << '\n'; 
} 

leaderBoard = sstream.str(); 
+0

代わりに 'std :: ostringstream'を使うことをお勧めします。また、myPlayer-> getPlayerRoom() - > playersInRoom'をローカル参照変数に、 'playersInRoom.at(contor)'を別のローカル変数にキャッシュすることをお勧めします。これにより、コードを読みやすく保守しやすくなります。 –

関連する問題