0
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を読みましたが、上記のコードを変更する方法がまだわかりません。

アドバイスをありがとう!

4

3 に答える 3

4

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();
于 2013-04-29T10:00:11.930 に答える
1

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そうしないと、計算で間違った結果が得られます。

于 2013-04-29T11:05:14.903 に答える
0

こちらのドキュメントを参照してください。

これによって最後の命令を修正するだけです:

out.insert(a," ",(70-a-b<70)?(70-a-b):70);
于 2013-04-29T10:14:26.737 に答える