bitte um hilfe wegen fehler in meiner funktion..



  • TUT mir LEID,

    ich habe ein sehr banales problem:

    vector<char> erase(vector<char> vc, int a, int b) {
      vector<char> ausgabe;
    
      for(int x = 0; x < vc.size(); x++) {
        if(x >= a && x <= b)
          x++;
    
        else ausgabe.push_back(vc[x]);
    }
    
    return ausgabe;
    }
    

    meine funktion funktioniert natürlich nicht so wie soll.
    wenn ich nun eine zeichenkette eingebe zum beipiel 22*22*2, dann löscht er bis element 5 bei den parametern 0 und 4 als a u. b.
    es bleibt also nur eine 2 im vector und nich "*2" weiß jemand wie man diesen fehler umgeht?

    thx im voraus!



  • vector<char> erase(const vector<char>& vc, int a, int b) {
    // const reference ist schneller
      vector<char> ausgabe;
    
      for(int x = 0; x < vc.size(); x++) {
        if(x >= a && x < b) // hier muss das '=' weg, sonst wird noch vc[4] benutzt
          x++;
    
        else ausgabe.push_back(vc[x]);
    }
    
    return ausgabe;
    }
    

    mfg



  • vector<char> erase(vector<char> vc, int a, int b) { 
      vector<char> ausgabe; 
    
      for(int x = 0; x < vc.size(); x++) { 
        if(!(x >= a && x <= b)) 
         ausgabe.push_back(vc[x]); 
    } 
    
    return ausgabe; 
    }
    


  • danke schonmal für die antworten... ich musste noch für die schule lernen.

    terraner's vorgehensweise hab ich auch schon probiert! dann erhalt ich als ausgabe dummerweise 2*2 (bei obigen beispiel)

    das beispiel von life hat die ausgabe '2'



  • //teil1 zeichenkette einlesen
      while(true) {
        cin.get(eingabe);
        if(eingabe != 'e')
          veingabe.push_back(eingabe);
        else break;
      }
      //test
      veingabe = erase(veingabe, 0, 4);
      for(int k = 0; k < veingabe.size(); k++)
      cout<<"pos"<<k<<" "<<veingabe[k]<<endl;
    

    falls einer lust hat kann er es selbst ausprobieren...
    bei mir ist die sache ziemlich kompliziert...
    teil1 geht über viele funktionen; ich habe den fehler aber eingegrenzt und nun will meine funktion partout nicht richtig löschen, mir ist das ein rätsel...

    entweder ein zeichen zuviel oder zuwenig, aber kein mittel dazwischen...



  • _/°°_ schrieb:

    danke schonmal für die antworten... ich musste noch für die schule lernen.

    terraner's vorgehensweise hab ich auch schon probiert! dann erhalt ich als ausgabe dummerweise 2*2 (bei obigen beispiel)

    das beispiel von life hat die ausgabe '2'

    nein es kommt es "*2" raus .. dein fehler war es, dass du x doppelt erhöhst, wenn es in dem bereich 0-4 liegt (einmal in der forschleife selber und einmal in der if bedingung). Wenn du es so machst, wie ich es vorgeschlagen habe, funktioniert es (hab es getestet -.-)



  • ich habe jetzt noch mal eine kurzfassung mit deiner funktion zusammengeschustert compilier bitte mal und teil mir das erg mit bei mir ist es 2... ich habe deine funkton genau kopiert.. dann muss der fehler wahrscheinlich woanders sein! 😞

    #ifdef HAVE_CONFIG_H
    #include <config.h>
    #endif
    //nicht meckern
    #include <iostream>
    #include <cstdlib>
    #include <vector>
    #include <stack>
    #include <map>
    #include <cstdlib> 
    #include <stdio.h>
    
    using namespace std;
    
    vector<char> veingabe;
    
    vector<char> erase(vector<char> vc, int a, int b) {
      vector<char> ausgabe;
    
      for(int x = 0; x < vc.size(); x++) {
        if(x >= a && x <= b)
          x++;
    
        else ausgabe.push_back(vc[x]);
    }
    
    return ausgabe;
    }
    
    int main(int argc, char *argv[])
    {
      char eingabe;
    
      while(true) {
        cin.get(eingabe);
        if(eingabe != 'e')
          veingabe.push_back(eingabe);
        else break;
      }
    
      veingabe = erase(veingabe, 0, 4);
      for(int k = 0; k < veingabe.size(); k++)
      cout<<endl<<"pos"<<k<<" "<<veingabe[k]<<endl;
      //rechnung(veingabe);
    
      system("Pause");
    
      return EXIT_SUCCESS;
    }
    

    mail slash-ex@web.de



  • das ist doch nicht meine version der funktion. meine version ist

    vector<char> erase(vector<char> vc, int a, int b) { 
      vector<char> ausgabe; 
    
      for(int x = 0; x < vc.size(); x++) { 
        if(!(x >= a && x <= b)) 
         ausgabe.push_back(vc[x]); 
    } 
    
    return ausgabe; 
    }
    

    edit:

    #include "stdafx.h"
    #ifdef HAVE_CONFIG_H 
    #include <config.h> 
    #endif 
    //nicht meckern 
    #include <iostream> 
    #include <cstdlib> 
    #include <vector> 
    #include <stack> 
    #include <map> 
    #include <cstdlib> 
    #include <stdio.h> 
    
    using namespace std; 
    
    vector<char> veingabe; 
    
    vector<char> erase(vector<char> vc, int a, int b) { 
      vector<char> ausgabe; 
    
      for(int x = 0; x < vc.size(); x++) { 
        if(!(x >= a && x <= b)) 
         ausgabe.push_back(vc[x]); 
    } 
    
    return ausgabe; 
    } 
    
    int main(int argc, char *argv[]) 
    { 
      char eingabe; 
    
      while(true) { 
        cin.get(eingabe); 
        if(eingabe != 'e') 
          veingabe.push_back(eingabe); 
        else break; 
      } 
    
      veingabe = erase(veingabe, 0, 4); 
      for(int k = 0; k < veingabe.size(); k++) 
      cout<<endl<<"pos"<<k<<" "<<veingabe[k]<<endl; 
      //rechnung(veingabe); 
    
      system("Pause"); 
    
      return EXIT_SUCCESS; 
    }
    
    22*22*2e
    
    pos0 *
    
    pos1 2
    Drücken Sie eine beliebige Taste . . .
    


  • thx


Anmelden zum Antworten