Padding stl Strings in C ++
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)
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.
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;
}