int Variablen mit führenden nullen manipulieren - Anfänger



  • Hallo ich habe mal ne Frage ?
    Also ... Ich fange mal von vorne an. Ich bringe mir gerade ein bissel C++ bei (mehr recht als schlecht) und zwar mit einem Programm mit den ich einen Dateinamen für Serien in Kodi erstellen kann (*.disc). Programm geht auch so.Nun habe ich eine Funktion geschrieben die den Dateiname erzeugt. Geht auch nur ....
    Ich würde gern die int Variablen zahlEpisode & zahlSerie bei einstelliger Zahl mit einer null am Anfang auffüllen. Bis jetzt mache ich das durch umwandeln der int Variablen in eine string Variable. Nun meine Frage ist es überhaupt möglich eine int Varibale mit einer führenden null darzustellen ? Bitte erst mal nur Antworten ob es möglich ist. (wegen lerneffekt) 😃
    So vielleicht mal mein Code.

    #include <sstream>
    
    using std::string;
    
    string dateiNeuName(string nameSerie, int zahlStaffel, int zahlEpisode)
    {
    	using namespace std;
    
    	string dateiname;
    	string staffelNummer;
    	string episodenNummer;
    
    	stringstream sstrStaffel;
    	sstrStaffel << zahlStaffel;													// int Variable zahlStaffel in String umwandeln
    	staffelNummer = sstrStaffel.str();
    
    	stringstream sstrEpisode;
    	sstrEpisode << zahlEpisode;													// int Variable zahlEpisode in String umwandeln
    	episodenNummer = sstrEpisode.str();
    
    	if (staffelNummer.length() <= 1)											// prüfen ob Staffel 2-stellig ist wenn nicht dann 0 voranstellen
    		staffelNummer.insert(0, "0");
    
    	if (episodenNummer.length() <=1)											// prüfen ob Episode 2-stellig ist wenn nicht dann 0 voranstellen
    		episodenNummer.insert(0, "0");
    
    	dateiname = nameSerie + ".S" + staffelNummer + "E" + 
    				episodenNummer + ".disc";										// Dateinamen erzeugen alles aus String´s
    
    	return dateiname;															// fertigen Dateinamen zurückgeben
    

    Ich danke euch schon mal im voraus. Danke.



  • Dafür sind die Stream Manipulators gedacht (iomanip Header):

    string dateiNeuName(string nameSerie, int zahlStaffel, int zahlEpisode)
    {
      using namespace std;
    
      stringstream ss;
      ss << setfill('0') << nameSerie
         << ".S" << setw(2) << zahlStaffel
         << ".E" << setw(2) << zahlEpisode << ".disc";
      return ss.str();
    }
    


  • N.T-REX schrieb:

    Bitte erst mal nur Antworten ob es möglich ist. (wegen lerneffekt) 😃

    Sorry zu spät gelesen. Kannst dir ja nochmal die anderen Manipulators anschauen.



  • Ja das habe ich ja rausgefunden, dass ich die int Varibale in eine string Variable umwandeln muss, also nähme ich mal an es geht bei int Variablen nicht direkt sondern nur über den umweg der umwandlung in string?

    Na gut dann danke ich mal und noch schönen Abend.
    Danke.

    Oh ich habe den Code betrachtet die int Variablen sind ja garnicht umgewandelt wurden. Danke. 😃

    sebi707 schrieb:

    string dateiNeuName(string nameSerie, int zahlStaffel, int zahlEpisode)
    {
      using namespace std;
    
      stringstream ss;
      ss << setfill('0') << nameSerie
         << ".S" << setw(2) << zahlStaffel
         << ".E" << setw(2) << zahlEpisode << ".disc";
      return ss.str();
    }
    

    müste das nicht "ss.c_str()" heißen.



  • N.T-REX schrieb:

    Ja das habe ich ja rausgefunden, dass ich die int Varibale in eine string Variable umwandeln muss, also nähme ich mal an es geht bei int Variablen nicht direkt sondern nur über den umweg der umwandlung in string?

    Kleine Erklärung zum Verständnis:
    Zahlen sind letztlich nur Bitmuster, da gibts so etwas wie "führende Nullen" nicht.
    Was du willst ist ein string der die Zahl darstellt. Das ist eine dezimale Repräsentation, ergo gibts da auch führende Nullen. Und bei der Unwandlung der Zahl(Binär) in einen string kannst du die Zahl auch mit auch führende Nullen padden.

    N.T-REX schrieb:

    müste das nicht "ss.c_str()" heißen.

    Probier den Code doch bitte erst aus bevor du Fragen stellst.
    Das ist ein stringstream, ergo heißt die Funktion ".str()". Die verwandelt den stringstream in einen string.



  • N.T-REX schrieb:

    Ja das habe ich ja rausgefunden, dass ich die int Varibale in eine string Variable umwandeln muss, also nähme ich mal an es geht bei int Variablen nicht direkt sondern nur über den umweg der umwandlung in string

    Direkt einen int umwandeln geht nicht. Ein int ist erstmal nur eine Zahl. Wie man diese darstellt (mit/ohne führende Nullen, welche Basis usw.) ist eine ganz andere Frage. Das Anfügen der Nullen passiert bei der Umwandlung zu einem String.

    N.T-REX schrieb:

    müste das nicht "ss.c_str()" heißen.

    Nein c_str() ist die Methode um einen std::string zu einem const char* (also das was in C üblicherweise ein String ist) zu machen. Hier wird aber ein std::stringstream zu einem std::string.


Anmelden zum Antworten