Teilstring auslesen hilfee



  • sorry,

    diese meldung kommt,

    [C++ Fehler] Unit1.cpp(37): E2285 Keine Übereinstimmung für 'string::append(char)' gefunden
    


  • Versuch mal

    neuer_string = neuer_string + str[i];
    

    statt dem append.



  • schmoo2012 schrieb:

    sorry,

    diese meldung kommt,

    [C++ Fehler] Unit1.cpp(37): E2285 Keine Übereinstimmung für 'string::append(char)' gefunden
    

    Verwende

    mystring.push_back(str[i]);
    

    antselle

    mystring.append(str[i])
    

    append ist nicht für ein char definiert.



  • Oder:

    neuer_string.append(string(str[i]))
    

    Aber das dürfte exakt das selbe sein 😉



  • temp schrieb:

    Oder:

    neuer_string.append(string(str[i]))
    

    Aber das dürfte exakt das selbe sein 😉

    Ist das selbe std:string besitzt auch keinen Konstruktor für char.



  • temp schrieb:

    Versuch mal

    neuer_string = neuer_string + str[i];
    

    statt dem append.

    Aber das geht. Hab ich so im Einsatz.
    Ist die eleganteste Lösung finde ich.



  • temp schrieb:

    Ist die eleganteste Lösung finde ich.

    Nach der Lösung mit operator+= könnte man drüber diskutieren. push_back() ist meines Erachtens trotzdem einheitlicher.



  • okay,erstma danke,

    könnte mir jemand von euch den kompletten quellcode mal aufschreiben?
    also wenn ich das aus einer datei namens "zone.inf" einlesen will und der das z.b als als output in einer "output.txt" speichert.

    das hier hatte ich schonmal geschrieben, aber das Programm gibt mir ja nur den Kompletten text aus und nicht ab "PJ" bis "-" und der zähler zählt nur die reihen und nicht die buchstaben

    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>
    using namespace std;
    
    int main ()
    {
    
      char buffer[800];
      int zaehler = 0;
      string line;
      ofstream a_file ("output.txt");
      ifstream myfile ("zone.inf");
      if (myfile.is_open())
    
      {
        while (!myfile.eof() )
        {
    
          getline (myfile,line);
          cout<<line<<"\n"<<endl;
          a_file<<"\n"<<line;
          zaehler++;
    
        }
        myfile.close();
        cout<<"Z"<<char(132)<<"hler: "<<zaehler<<"\n";
    
      }
    
      else cout << "Unable to open file";
    
      system("Pause");
      return 0;
    }
    


  • An der Stelle

    cout<<line<<"\n"<<endl;
    

    die Funktion mit line aufrufen.

    string new_line= get_part_string(line, &zaehler);
    cout<<new_line<<"\n"<<endl;
    a_file<<"\n"<<new_line;
    

    Zähler musst dann halt noch in die Funtion rein.



  • schmoo2012 schrieb:

    okay,erstma danke,

    Bitte. Macht aber nicht gerade den Eindruck, als hättest du die Beiträge genau gelesen...

    schmoo2012 schrieb:

    könnte mir jemand von euch den kompletten quellcode mal aufschreiben?

    Ähm... Nein. Wir haben dir eigentlich genügend Tipps gegeben. Vor allem mit den STL-Funktionen sollte die Sache kein Problem sein. Auf www.cplusplus.com findest du deren Dokumentation, möglicherweise lohnt sich ein Anschauen...

    Dein Code beinhaltet im Weiteren einige Fehler:

    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>   // alle 3 Header sind falsch, vor allem dieser hier
    // richtig wären <iostream>, <fstream>, <string>
    using namespace std;
    
    int main ()
    {
    
      char buffer[800];    // Wieso Variablen anlegen, die man nie braucht?
      int zaehler = 0;
      string line;         // Da frage ich mich sowieso, woher string bekannt sein soll...
      // ...
    }
    


  • Hallo Nexus,

    ich Programmiere mit dem c++ builder und da muss man ein ".h" dran hängen
    sonst funktioniert das nicht.



  • schmoo2012 schrieb:

    ich Programmiere mit dem c++ builder und da muss man ein ".h" dran hängen
    sonst funktioniert das nicht.

    Ist das eine aktuelle Version? Wie auch immer, das widerspricht dem C++-Standard. Und dieser wird hier beachtet, vielleicht solltest du das nächste Mal im VCL-Forum posten.

    Und wie oben schon angedeutet, ist <string.h> ein C-Header für Funktionen mit char* wie strcpy() . Keine Ahnung, wie man so die C-Funktionen benutzen will...



  • Ja, das Beispiel von dir funktioniert also?!

    Dann füg doch noch meinen Code und die Funktion ein.
    Die Funktion musst halt noch um den Zähler erweitern.

    Und dann war es das doch schon...



  • Ja das Programm funktioniert so wie ich es geschrieben hab.

    wenn ich deinen teil dazu enfüge dann, hat er einen fehler mit

    string new_line = get_part_string(line, &zaehler);
    

    Die Fehlermeldung lautet

    [C++ Fehler] Unit1.cpp(21): E2268 Aufruf der undefinierten Funktion 'get_part_string'
    


  • Woher sollte get_part_string() auch bekannt sein?

    Ist es in diesem Thread eigentlich üblich, dass Antworten einfach übergangen werden? Ich hab bereits mehrfach auf die STL und die std::string -Funktionen hingewiesen... 🙄



  • string get_part_string(string str, int z) { 
      string neuer_string = ""; 
      int start1 = 0; 
      int start2 = 0; 
      bool start = false; 
      for(int i=0;i<str.length();i++) { 
        if ((str[i] == 'P' && start == false) { 
        start1 = i; 
        }   
        else if ((str[i] == 'J') && start == false) { 
        start2 = i 
        }   
        else if (str[i] == '-')  { 
        start=false; 
        }   
        if ((string1+1)==string2){ 
        start=true; 
        } 
    
        if (start && (i!=start2)) { 
        neuer_string+=str[i];
        z++;
        } 
      } 
      return neuer_string; 
    }
    

    Das einfach nach den Include-Anweisungen.



  • schmoo2012 schrieb:

    ich Programmiere mit dem c++ builder und da muss man ein ".h" dran hängen
    sonst funktioniert das nicht.

    Welche Version hast du denn? Zumindest seit dem BCB5 (evtl. auch davor) gibt es mit den Standardheadern kein Problem.



  • Danke das hat mir sehr weitergeholfen.
    Das Programm läuft bis dahin schonmal.
    Oh und sorry Nexus war keine absicht 😉
    hab mir mal ein paar von den string-Funktionen angeschaut und da sind wirklich ein paar sehr nützliche dabei.

    Ich benutze die Version BCB5 und da muss man es leider noch so schreiben.

    Schönen Tag noch 😉



  • schmoo2012 schrieb:

    Ich benutze die Version BCB5 und da muss man es leider noch so schreiben.

    Nein, muß man nicht. 😡
    Ich benutze den BCB5 auch und habe keinerlei Probleme mit den Standardheadern. Wie kommst du auf diese Aussage? Was für Fehler hast du wenn du die Standardheader verwenden willst?



  • schmoo2012 schrieb:

    sonst funktioniert das nicht.

    Was heißt in dem Fall "funktioniert nicht?"
    Da der C++ Builder deutlich nach dem Standard erschienen ist bezweifle ich doch mal stark dass er die Standard-header nicht kennt. Hast du auch beachtet, dass in den Standard-Headern (ohne .h) sämtliche Klassen und Funktionen im namespace std zu finden sind?


Anmelden zum Antworten