int a=sizeof(out);
int b=sizeof(s2);
out+=s2;
out.insert(a,(70-a-b)," ");
out と s2 は文字列です。2 つの文字列の間にいくつかのスペース文字を追加して、合計の長さを 70 にします。VS は、2 番目のパラメーターに「const char *」を必要とします。C++: insert char to a stringを読みましたが、上記のコードを変更する方法がまだわかりません。
アドバイスをありがとう!
int a=sizeof(out);
int b=sizeof(s2);
out+=s2;
out.insert(a,(70-a-b)," ");
out と s2 は文字列です。2 つの文字列の間にいくつかのスペース文字を追加して、合計の長さを 70 にします。VS は、2 番目のパラメーターに「const char *」を必要とします。C++: insert char to a stringを読みましたが、上記のコードを変更する方法がまだわかりません。
アドバイスをありがとう!
out と s2 は文字列です。2 つの文字列の間にスペース文字を追加して、合計の長さを 70 にします。
まず第一に、ここでは sizeof は間違った演算子です。あなたが必要
int a = out.size();
int b = s2.size() ;
あなたが望むことをするための1つのオプションは
int spaceCount = 70-a-b;
out += string(spaceCount, ' ') + s2;
もう 1 つのオプションは、setw を使用することです。
ostringstream resultSS;
resultSS << out << setw(70-out.size()) << right << s2;
out = resultSS.str();
a.size()
問題のテキストを挿入するのはそれほど難しいことではありませんが、( と を使用して)正しいサイズを取得したら、b.size()
これが最善の解決策であるかどうか疑問に思います。out
を追加する前に、おそらく必要なパディングを
追加しs2
ます。何かのようなもの:
int padding = 70 - (asInt( out.size() ) + asInt( s2.size() ) );
if ( padding > 0 ) {
out.append( padding, ' ' );
}
out.append( s2 );
std::string
サイズに符号なし型 ( size_t
) を使用し、C++ の符号なし型は驚くべき結果をもたらす傾向があるため、追加のテストが必要です。(asInt
文字列がどこから来たかによって、必要な場合とそうでない場合があります。基本的には次のとおりです。
int
asInt( size_t original )
{
if ( original > std::numeric_limits<int>::max() ) {
throw std::range_error( "size too large for int" );
return static_cast<int>( original );
}
多くの場合、コードのこのポイントに到達する前に、文字列が長すぎてはならないことがわかっているため、文字列は必要ありません。
パディングを計算する前に、サイズを(または他の符号付きの型に)変換する必要があることに注意してください。int
そうしないと、計算で間違った結果が得られます。