string von hinten auslesen



  • Hallo
    Ich programmiere erst seit kurzem mit C++ und habe darum folgende Anfängerfragen:
    Wie kann ich denstring Beispielstring, der mit Nullen und Eisen gefüllt ist, ab der ersten Eins (eventuelle Nullen am Anfang ignorieren) auslesen und wenn es Nullen hat, diese löschen? Nachher sollte ich den string auch von hinten einlesen, um auch die Nullen am Ende zu löschen.
    Vielen Dank für eure Antworten
    Moritz



  • Hallo,

    um nach der ersten 1 zu suchen:

    std::string::iterator it = myString.find_first_of("1");
    
    while(it != myString.end()) //bis zum ende iterieren
        if(*it == "0")
            myString.erase(it++); //element loeschen
    

    Um die letzte 1 zu finden:

    std::string::iterator it = myString.find_last_of("1");
    
    //tue was mit it
    

    Deine Beschreibung ist allerdings etwas schleierhaft. Was willst du denn jetzt
    tun? Alle Nullen loeschen? Vorne die sollen stehen bleiben?

    mfg
    v R



  • Sorry für meine ungenaue Beschreibung. Ich will alle Nullen vor der ersten Eins und alle Nullen hinter der letzten Eins löschen. Eventuell vorhandene Nullen zwischen der ersten und der letzten Eins sollen erhalten bleiben.
    Ich hoffe diese Beschreibung ist etwas klarer. Dein Code leuchtet mir allerdings ein. Ich werde es heute Abend gleich mal ausprobieren.
    MfG
    Moritz



  • Hallo,
    probier das mal aus:

    #include <cstring>
    
    char* lese(const char const *s)
    {
    	char c = s[0];
    	char* ergebnis = new char[strlen(s)];
    	int iErgebnis=0,i=0;
    	int nurNullerAb=-1;
    	bool erste1 = false;
    
    	while(c!=0)
    	{
    		if(c=='1')
    		{
    			erste1 = true;
    			nurNullerAb=-1;
    		}
    		else if(erste1 && c=='0' && nurNullerAb<0)
    			nurNullerAb=iErgebnis;
    
    		if(erste1)
    			ergebnis[iErgebnis++]=c;
    
    		c=s[++i];
    	}
    
    	if(nurNullerAb>=0)
    		ergebnis[nurNullerAb]=0;
    	else
    		ergebnis[iErgebnis]=0;
    
    	return ergebnis;
    }
    


  • In diesem speziellen Fall:

    #include <iostream>
    #include <string>
    
    int main() {
      std::string s = "00010011011101000", t;
      std::string::size_type i = s.find('1');
    
      t = s.substr(i, s.rfind('1') - i + 1);
    
      std::cout << t << std::endl;
    }
    


  • Hi,

    dass die Binärzahl dadurch nachher eine völlig andere sein kann, ist dir aber bewusst, oder?

    MfG Eisflamme



  • Das ist mir klar. Es handelt sich hier allerdings gar nicht um ne Binärzahl, sondern um ne andere Aufgabe.


Anmelden zum Antworten