Simplifier une ligne de push_back (string) répétitifs

Simplifier une ligne de push_back (string) répétitifs - C++ - Programmation

Marsh Posté le 08-11-2016 à 16:26:49    

Salut !
 
Je voudrais savoir si je peux simplifier cette ligne :
 

Code :
  1. if (lettreBin[0]=='0')  {final.push_back('0'); final.push_back('0'); final.push_back(' '); final.push_back('0'); }  // fonctionne mais long à taper
  2. if (lettreBin[0]=='0')  {final.push_back('0','0',' ','0'); }  //ne fonctionne pas, ni avec des ; pour séparer
  3. if (lettreBin[0]=='0')  {final.push_back("00 0" ); }  // ne fonctionne pas non plus


 
Thank you


Message édité par Lt Ripley le 29-11-2016 à 14:18:35
Reply

Marsh Posté le 08-11-2016 à 16:26:49   

Reply

Marsh Posté le 08-11-2016 à 20:19:25    

Code :
  1. if (lettreBin[0]=='0')  {final.append(2,'0').append(1,' ').append(1,'0'); }


 
 
?
 
ou plus simple encore :
 

Code :
  1. if (lettreBin[0]=='0')  {final.append("00 0" ); }

Reply

Marsh Posté le 08-11-2016 à 23:13:34    

Niquel ! merci bien

Reply

Marsh Posté le 08-11-2016 à 23:57:32    

Si tu as besoin de faire des concaténations successives dans une string, tu peux utiliser la classe ostringstream qui permet d'utiliser l'opérateur << consécutivement:
 

Code :
  1. #include <sstream>
  2. ...
  3. std::ostringstream lettreBin;
  4. lettreBin << '0' << '0' << ' ' << '0';
  5. // Ou, en beaucoup plus concis:
  6. lettreBin << "00 0";
  7. std::string lettreBinStr = lettreBin.str();


 
Ça a l'avantage de souvent être plus joli syntaxiquement qu'un paquet d'append successifs, et ça permet aussi de concaténer facilement d'autres types que les strings.


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 09-11-2016 à 00:45:29    

quel est le type de ta variable final ?


---------------
last.fm
Reply

Marsh Posté le 09-11-2016 à 11:22:03    

Merci les gars
 
final est un string.  Pour le coup .append me va bien car je suis pas obligé de créer un flux (ostringstream)
 
.str() c'est comme .to_string() ?
 
Plus haut dans mon programme je suis obligé de faire un .to_string() sur un string pourtant, pour pouvoir le concaténer ensuite avec un +=
 
Avec un flux et l'opérateur << jepeux concaténer des int ?  Du genre (pour un int a qui fait 10) si je fais << 10 ça va faire 1010 ?

Reply

Marsh Posté le 09-11-2016 à 11:49:53    

Lt Ripley a écrit :

Merci les gars
 
final est un string.  Pour le coup .append me va bien car je suis pas obligé de créer un flux (ostringstream)
 
.str() c'est comme .to_string() ?
 
Plus haut dans mon programme je suis obligé de faire un .to_string() sur un string pourtant, pour pouvoir le concaténer ensuite avec un +=
 
Avec un flux et l'opérateur << jepeux concaténer des int ?  Du genre (pour un int a qui fait 10) si je fais << 10 ça va faire 1010 ?


Oui avec ostringstream tu peux concaténer int, bool, string sans te soucier d'avoir à appeler un to_string() au préalable.
 
(Par contre je ne comprends pas pourquoi tu dois appeler to_string sur un string :o )


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 09-11-2016 à 12:20:05    

C'est après ça que je dois appeler to_string (sur binStr)
 

Code :
  1. bitset<7>binStr(valeur);  //ça met le binaire de valeur dans binStr qui est déclaré comme string juste au dessus


 
Sinon j'ai ça (je viens de le refaire) :   error: no match for 'operator+=' (operand types are 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' and 'std::bitset<7u>')|
 
Quand je fais motBin += binStr


Message édité par Lt Ripley le 09-11-2016 à 12:23:45
Reply

Marsh Posté le 22-11-2016 à 17:44:56    

On peut aussi faire ça sur le string (nommé final) je n'y ai pas pensé
 

Code :
  1. final += "00 0"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed