string vokale ersetzen

Dolphon

Erfahrenes Mitglied
Hi,

ich würde gerne in einen string alle vokale erstetzen.
Allerdings komme ich nicht weiter, da mein Compiler mir Fehlermeldungen um die Ohren wirft.:

hier einmal der Code:
Code:
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string>
#include <algorithm> // für replace
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
	
string test = "Alle leute finden diesen Satz immer doof";

int Laengen[3];
//Vokale i, e, a, u, o, ä, ö, ü
string vokale[] = {"i","e","a","u","o"};


	for (int j=0;j<(sizeof(vokale)/sizeof(vokale[0]));j++)
	{


	replace(test.begin(), test.end(), vokale[j], 'o'); //(Beginn , Ende, Suchen nach, ersetzen durch)

	}

cout << test<< endl;


	
	getch();
	return 0;
}

Die Fehlermeldung ist folgende:

Code:
 error C2782: "void std::replace(_FwdIt,_FwdIt,const _Ty &,const _Ty &)": template-Parameter "_Ty" ist mehrdeutig.
1>        c:\programme\microsoft visual studio 8\vc\include\algorithm(819): Siehe Deklaration von 'std::replace'
1>        kann 'char' sein
1>        oder "std::string"
 
Das was du ersetzen willst und das womit du es ersetzt müssen vom gleichen Typ sein. (Was hier auch mehr sinn macht!)

C++:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>

const char * const vowels("aeiou");

int main()
{
    std::string string("Alle Leute finden diesen Satz doof!");
    std::cout << string << std::endl;
     
    const std::size_t count_vowels(std::strlen(vowels));
    for (std::size_t j(0); j < count_vowels; ++i)
        std::replace(string.begin(), string.end(), vowels[j], 'o'); 
    
    std::cout << string<< std::endl;
    std::cin.ignore();
}
... wobei es natürlich sowas von ineffektiv ist, die replace-Funktion sooft aufzurufen und nicht in einem Durchlauf direkt auf alle Zeichen zu testen ... aber okay ;) Auch bissel Performance wäre durch Index-Operator-Einsparungen zu erreichen ...
 
Danke für deine Anwort. Könntest du mir evtl. folgenden 2 Zeilen erläutern.
Irgendwie ist mit diese Schreibeweise auch nicht ganz so geläufig.

Code:
const char * const vowels("aeiou");
const size_t count_vowels(strlen(vowels));

Wie kann man den in einem Durchlauf direkt mehrere Zeichen testen lassen.
 
Hi.
Danke für deine Anwort. Könntest du mir evtl. folgenden 2 Zeilen erläutern.
Irgendwie ist mit diese Schreibeweise auch nicht ganz so geläufig.

Code:
const char * const vowels("aeiou");
const size_t count_vowels(strlen(vowels));
Das sind Deklarationen mit Initialisierung. Äquivalent wäre folgendes:
C++:
const char* const vowels = "aeiou";
const size_t count_vowels = strlen(vowels);
Wie kann man den in einem Durchlauf direkt mehrere Zeichen testen lassen.
C++:
std::replace_if(s.begin(), s.end(), std::bind1st(std::ptr_fun(::strchr), vowels), 'o');
Gruß
 
Zuletzt bearbeitet:
Zurück