J'utilise std::string
et je dois les laisser à une largeur donnée Quelle est la méthode recommandée pour faire cela en C++?
Exemple de saisie:
123
pavé à 10 caractères.
Exemple de sortie:
123
(7 espaces devant 123)
manipulateur std :: setw (setwidth)
std::cout << std::setw (10) << 77 << std::endl;
ou
std::cout << std::setw (10) << "hi!" << std::endl;
sorties rembourrées 77 et "salut!".
si vous avez besoin de résultat en tant que chaîne, utilisez l'instance de std :: stringstream à la place de l'objet std :: cout.
ps: fichier d'en-tête responsable <iomanip>
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;
}
Le moyen le plus simple auquel je puisse penser serait avec un stringstream:
string foo = "foo";
stringstream ss;
ss << setw(10) << foo;
foo = ss.str();
foo
devrait maintenant être rembourré.
Vous pouvez l'utiliser comme ceci:
std::string s = "123";
s.insert(s.begin(), paddedLength - s.size(), ' ');
vous pouvez créer une chaîne contenant N espaces en appelant
string(N, ' ');
Pour que tu puisses faire comme ça:
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;
}
Il y a un moyen simple et agréable :)
const int required_pad = 10;
std::string myString = "123";
size_t length = myString.length();
if (length < required_pad)
myString.insert(0, required_pad - length, ' ');
Que diriez-vous:
string s = " "; // 10 spaces
string n = "123";
n.length() <= 10 ? s.replace(10 - n.length(), n.length(), s) : s = n;
Je cherchais le sujet parce que je développais VCL; De toute façon faire une fonction n'était pas si difficile.
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);
Dans les deux cas, 10 espaces vides seront ajoutés à droite. Je recommande l’utilisation de polices monospaces, telles que messager ou consolas, pour un format correct.
Voici ce qui se passe lorsque vous n'utilisez pas de police monospace
johnny____
en espèces______
// using monospace font the output will be
johnny____
cash______
Les deux cas ont la même longueur.