Frage

Ich bin mit std::string und müssen sie auf eine bestimmte Breite nach links Pad. Was ist der empfohlene Weg, dies in C ++ zu tun?

Probeneingang:

123

Pad zu 10 Zeichen.

Beispiel für die Ausgabe:

       123

(7 Plätze vor 123)

War es hilfreich?

Lösung

std :: setw (SetWidth) Manipulator

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

oder

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

Ausgänge gepolstert 77 und "hallo".

Wenn Sie führen müssen als String Verwendung Instanz std :: string statt std :: cout-Objekt.

ps: verantwortlich Header-Datei <iomanip>

Andere Tipps

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;
}

Sie können es wie folgt verwendet werden:

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

Der einfachste Weg, ich mit einem string wäre denken kann:

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

foo sollte nun aufgefüllt werden.

Sie eine Zeichenfolge, die N Räume durch den Aufruf schaffen

string(N, ' ');

So mögen Sie dies tun könnte:

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; }
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;
}

Es gibt eine schöne und einfache Art und Weise :)

const int required_pad = 10;

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

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

Wie wäre:

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

Ich war auf der Suche das Thema, weil Im VCL zu entwickeln; Auf jeden Fall macht eine Funktion nicht nicht so hart war.

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);

In beiden Fällen ist es auf der rechten Seite 10 Leerzeichen hinzufügen. Ich empfehle auf nichtproportionale Schriftarten wie Kuriere oder consolas für ein korrektes Format zu verwenden.

Dies ist, was passiert, wenn Sie nicht proportionale Schrift
mit johnny____
Bargeld ______

// using monospace font the output will be
johnny____
cash______

In beiden Fällen die gleiche Länge haben.

Erstellen

eine neue Reihe von 10 Räumen, und die Arbeit nach hinten in beiden Strings.

string padstring(const string &source, size_t totalLength, char padChar)
{
    if (source.length() >= totalLength) 
        return source;

    string padded(totalLength, padChar);
    string::const_reverse_iterator iSource = source.rbegin();
    string::reverse_iterator iPadded = padded.rbegin();
    for (;iSource != source.rend(); ++iSource, ++iPadded)
        *iPadded = *iSource;
    return padded;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top