Frage an STL Experten die sich mit replace_copy auskennen!



  • Hallo Leute,

    versuche gerade eine MemberFunktion zu basteln,
    die zum Ersetzen bestimmter Zeichen in einem STL string dienen soll.
    Natürlich könnte man hier die sehr gute Replace Funktion aus der MFC anwenden.
    Das wollte ich jedoch nicht, um möglichst Framework unabhängig zu bleiben.

    Anbieten würde sich hier die STL Funktion replace_copy.

    Bei Ganzzahlentypen wie integer klappt sie auch wunderbar

    int i[]={1,2,1,4,1},new_iArray[5];
    int old=1,new_=6;
    replace_copy(i,i+5,new_iArray,old,new_);
    

    Wenn man aber den Datentyp string verwendet:

    string i[]={"1","2","1","4","1"},new_iArray[5];
    string old="1",new_="6";
    replace_copy(i,i+5,new_iArray,old,new_);
    

    bekommt man aus der "algorithm" unter anderem solche Fehlermeldung: 😮
    c:\programme\microsoft visual studio\vc98\include\algorithm(268) : error C2784: 'bool __cdecl std::operator ==(const class std::istream_iterator<_U,_E,_Tr> &,const class std::istream_iterator<_U,_E,_Tr> &)' : Vorlagenargument fuer 'const class std::

    Für Freundliche Lösung/Tipp wäre ich dankbar?
    P.S.Hier macht es keinen Unterschied ob man's z.Bsp. mit dem VC++ oder mit dem C++Builder übersetzt.
    Die Fehlermeldung ist gleich.
    Danke!
    epidemic



  • also folgendes minimalbeispiel kompiliert und funktioniert:

    int main () {
       string i[]={"1","2","1","4","1"};
       string new_iArray[5];
       string old="1",new_="6";
       replace_copy(i,i+5,new_iArray,old,new_);
    
       copy(new_iArray,new_iArray+5,ostream_iterator<string>(cout,"\n"));
    }
    

    mit g++ -ansi -pedantic -Wall



  • Bei mir leider die gleiche fehlermeldung, auch mit Deiner Ergänzung.
    (VC++ 6) 😞
    epidemic



  • Habe den Code von davie mit dem VC++7.1 ausprobiert und es funktioniert einwandtfrei. Es kommt
    6
    2
    6
    4
    6
    heraus.

    Hier nochmal der Code:

    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    int main()
    { 
       string i[]={"1","2","1","4","1"}; 
       string new_iArray[5]; 
       string old="1",new_="6"; 
       replace_copy(i,i+5,new_iArray,old,new_); 
    
       copy(new_iArray,new_iArray+5,ostream_iterator<string>(cout,"\n")); 
    }
    

    Code-Hacker



  • Danke Jungs.

    Klappts einwandfrei , ich Idiot übersah es die <string> zu includieren. 😕

    Danke!

    epidemic


Anmelden zum Antworten