Bonjour,
Je dois contruire une chaine (dans un tableau que j'alloue a la bonne taille) avec les champs suivants:
- url(pas de longueur definie)
- login (12 caracteres, completes par des espaces si necessaire)
- password (8 caracteres, completes aussi)
Objectif: les perfs on s'en moque , il faut qu'il n'y ait pas de bug et que ca soit lisible et concis.
Je voulais faire ca avec un "sprintf", mais quand on specifie un champs de cette facon:
Code :
- sprintf(dst, "%12s", toto);
|
Ca rajoute des espaces a gauche et non a droite. Comment feriez vous ? Le probleme est tout bete, mais je suis sur qu'il y a un moyen de faire avec un nombre de lignes de code minimal et en faisant le moins possible de calcul d'offset.
Moi j'ai fait comme ca.
// je dispose de ca comme donnees en entree, j'ai deja verifie que login et password ne sont pas trop long
Code :
- const std::string &url;
- const std::string &login;
- const std::string &password;
|
Code :
- const size_t LOGIN_LEN = 12;
- const size_t PASS_LEN = 8;
- std::ostringstream result;
- result << url << login;
- std::fill_n(std::ostream_iterator<char>(result), LOGIN_LEN-login.size(), ' ');
- stream << password;
- std::fill_n(std::ostream_iterator<char>(result), PASS_LEN-password.size(), ' ');
- char *array = new char[result.str().size()+1];
- strpcy(array, result.str().c_str());
|
Message édité par kenshiro182 le 01-04-2003 à 09:35:32