Probleme mit string



  • Hallo erstmal bin neu hier 😃

    hoffe jemand kann mir helfen. habe folgendes problem.
    lese mit getline() sting's zeilenweise aus einer textdatei und vergleiche dies dann mit einem festen wert. dann bearbeite ich den zu vergleichenden string und durchlaufe nochmals die while schleife (string lesen => vergleich).
    Doch nach dem bearbeiten des strings ist der vergleich immer ungleich. 😕 😕
    Weiß jemand warum.

    using namespace std;
    
    void main()
    {
    sting suchWort;
    cin>>suchWort;
    
    int i;
      for (i=1;i<=2;i=i+1)
      {
           slaenge = sizeof(suchWort);                                           
           datei.seekg(0);                      // Auf Anfang setzen
           while (!datei.eof())                                      
           {
                 getline(datei, s);                            
                 iZaehler++;     
                 if (s==suchWort)
                 cout<<"Word "<< s <<"gefunden";
           }
           int ii;
                 for (ii=slaenge;ii>=1;ii=ii-1)
                 {
                   suchWort[ii]=suchWort[ii-1];                      // Datei wieder schließen
                 }   
                 suchWort[0]=suchWort[slaenge];
                 suchWort[slaenge]='\0';           
                 cout<<suchWort<<endl; 
      }  
    
      datei.close();                           // Datei schliessen
    }
    

    gruß willi



  • hi,

    um ehrlich zu sein bezweifele ich absolut das jemand versteht was dein code machen soll.
    Es wäre besser wenn du ein paar mehr informationen liefern würdest. Ich spekuliere das du folgendes vorhast:

    std::string line;
    std::string s = hallo;
    while(getline(datei, line)) // Lese je eine Zeile und das bis Dateiende 
    {
       iZaehler++; // Zeilen zählen? 
       if (s==line) // Vergleicht ob die Zeile die du eingelesen hast Hallo enthält
           cout<<"Wort "<< s <<"gefunden"; 
    }
    

    Was du nun mit probant anstellst bzw anstellen willst konnte ich nicht so ganz nachvollziehen, genauso wenig woher probant eigentlich kommt und was für ein Typ das ist.

    Ich hoffe trotzdem das dir das etwas geholfen hat.

    Allgemeine Empfehlung: http://tutorial.schornboeck.net

    BR
    evilissimo



  • hi evilissimo,

    danke für die schnelle antwort. du hast es richtig verstanden.
    will eine txt-datei nach einem bestimmten wort durchsuchen. das geht ja schon. falls das wort nicht gefunden wurde, will ich das wort "Hallo" nach z.B "oallH" verändern und dieses geänderte wort nochmals in der txt-datei suchen.
    Und genau das geht nicht. nach der veränderung des wortes wird das wort nicht mehr gefunden auch wenn "oallH" in der txt-datei steht.

    gruß willi



  • nach dem suchen hast du die datei ausgelesen, und der stream ist am ENDE der datei
    du musst also zurück zum anfang springen bevor du weiter suchen kannst



  • hi r0nny,

    deine antwort kling logisch, habe deshalb vor der while schleife

    datei.seekg(0, ios::beg);
    

    eingefügt, hat sich leider nichts geändert.

    gruss willi



  • Möglicherweise weil Dein Suchwort nach der ersten Bearbeitung "oallo" ist?



  • hi LordJaxom,

    ne ist es nicht. ich rotiere die buchstaben unter einnander einwenig und suche dann in der datei danach. alle kombinationen die erstellt werden, gebe ich am bildschirm aus und da seh ich das die wörter in der txt-datei vorhanden sind.
    z.B. eingabe "shau" ...mischen... => "haus" und haus ist in der txt-datei vorhanden, wird aber als nicht da angezeigt.
    Mir kommt es so vor, als macht er es wirklich nur nach dem ersten durchgang richtig...

    gruss willi



  • hi alle zusammen

    habe nochmals den "code" oben geändert, vielleicht ist es jetzt verständlicher!

    gruss willi



  • hi,

    habs gelöst.

    ...
           ifstream datei;                          <= war anfalscher stelle                                
           datei.open(pfad, ios::in);               <= war anfalscher stelle                              
           datei.seekg(0);                          <= hat gefehlt
           ...
    

    danke euch allen.

    gruss willi



  • root@nas schrieb:

    slaenge = sizeof(suchWort);
    

    die länge eines stl-strings bestimmt man mit suchWort.size(). sizeof(suchWort) ist die größe der string-struktur in bytes. das ist etwas völlig anderes!

    root@nas schrieb:

    int ii;
    for (ii=slaenge;ii>=1;ii=ii-1)
    {
      suchWort[ii]=suchWort[ii-1]; // Datei wieder schließen
    }
    suchWort[0]=suchWort[slaenge];
    suchWort[slaenge]='\0';           
    cout<<suchWort<<endl;
    

    du versuchst suchWort zu "rotieren". in deinem code steckt allerdings der wurm drin. es sollte so aussehen

    char c=suchWort[slaenge-1];
    int ii;
    for (ii=slaenge-2;ii>=0;ii=ii-1)
    {
      suchWort[ii+1]=suchWort[ii];
    }
    suchWort[0]=c;
    cout<<suchWort<<endl;
    

    das rotieren kannst du mit den string-methoden noch vereinfachen:

    suchWort.insert(0,1,suchWort[slaenge-1]);
    suchWort.erase(slaenge,1);
    


  • hi Konfusius,

    die länge eines stl-strings bestimmt man mit suchWort.size(). sizeof(suchWort) ist die größe der string-struktur in bytes. das ist etwas völlig anderes!

    so viel ich weiß kann man mittels sizeof() feststellen, wie viel speicher die datentypen oder eigene variablen belegen und genau das will ich ja.

    du versuchst suchWort zu "rotieren". in deinem code steckt allerdings der wurm drin. es sollte so aussehen

    ...funktioniert jedoch.

    das rotieren kannst du mit den string-methoden noch vereinfachen:

    super habe ich nicht gewußt probiere ich gleich mal. danke

    gruss willi


Anmelden zum Antworten