web-dev-qa-db-ja.com

C ++でのstl文字列のパディング

私はstd::stringを使用しており、それらを指定された幅に左詰めする必要があります。 C++でこれを行うための推奨される方法は何ですか?

サンプル入力:

123

10文字まで埋め込みます。

サンプル出力:

       123

(123の前に7つのスペース)

46
Alex B

std :: setw(setwidth)マニピュレーター

std::cout << std::setw (10) << 77 << std::endl;

または

std::cout << std::setw (10) << "hi!" << std::endl;

77と「hi!」が埋め込まれた出力。

結果を文字列として必要とする場合は、std :: stringオブジェクトの代わりにstd :: stringstreamのインスタンスを使用します。

ps:責任あるヘッダーファイル<iomanip>

60
bayda
void padTo(std::string &str, const size_t num, const char paddingChar = ' ')
{
    if(num > str.size())
        str.insert(0, num - str.size(), paddingChar);
}

int main(int argc, char **argv)
{
    std::string str = "abcd";
    padTo(str, 10);
    return 0;
}
41
Brian R. Bondy

次のように使用できます。

std::string s = "123";
s.insert(s.begin(), paddedLength - s.size(), ' ');
22
Naveen

私が考えることができる最も簡単な方法は、文字列ストリームを使用することです。

string foo = "foo";
stringstream ss;
ss << setw(10) << foo;
foo = ss.str();

fooがパディングされるはずです。

21
greyfade

を呼び出すことにより、N個のスペースを含む文字列を作成できます。

string(N, ' ');

したがって、次のようにすることができます。

string to_be_padded = ...;
if (to_be_padded.size() < 10) {
  string padded(10 - to_be_padded.size(), ' ');
  padded += to_be_padded;
  return padded;
} else { return to_be_padded; }
7
Antti Huima
std::string pad_right(std::string const& str, size_t s)
{
    if ( str.size() < s )
        return str + std::string(s-str.size(), ' ');
    else
        return str;
}

std::string pad_left(std::string const& str, size_t s)
{
    if ( str.size() < s )
        return std::string(s-str.size(), ' ') + str;
    else
        return str;
}
5

素敵で簡単な方法があります:)

const int required_pad = 10;

std::string myString = "123";
size_t length = myString.length();

if (length < required_pad)
  myString.insert(0, required_pad - length, ' ');
2
Andrew Grant

どうですか:

string s = "          "; // 10 spaces
string n = "123";
n.length() <= 10 ? s.replace(10 - n.length(), n.length(), s) : s = n;
1
Andy Mikula

私はVCLを開発しているため、このトピックを探していました。とにかく関数を作るのはそれほど難しくありませんでした。

void addWhiteSpcs(string &str, int maxLength) {
    int i, length;

    length = str.length();
    for(i=length; i<maxLength; i++)
    str += " ";
};

string name1 = "johnny";
string name2 = "cash";

addWhiteSpcs(name1, 10);
addWhiteSpcs(name2, 10);

どちらの場合も、右側に10個の空白スペースが追加されます。クーリエやコンソラなどのモノスペースフォントを使用して正しい形式にすることをお勧めします。

これは、等幅フォントを使用していないときに起こることです
johnny____
現金______

// using monospace font the output will be
johnny____
cash______

どちらのケースも同じ長さです。

0
vincent thorpe