Funktio korvaa siis merkkijonon toisella string -merkkijonosta. Toimii käsittääkseni samalla tavalla, kun str_replace(); PHP:ssä. Selvittää myös vähän luokkien käyttöä.
edit. 28.05. Muutettu koko soodi. Vanhassa oli mielenkiintoinen bugi, tein tämän kokonaan uusiksi.
string str_replace(string(word), string(word_2), string (charstring))
{
int lenght[2] = {0, 0}; string replaced_string;
class FindChar
{
public:
int stringpointer, wordpointer;
string charstring, word, mj;
bool FindChar::Find()
{
if(charstring[stringpointer + wordpointer] == word[wordpointer]) return true;
else return false;
}
};
FindChar replace;
replace.charstring = charstring;
while(charstring[lenght[0]] != '\0') lenght[0]++;
while(word[lenght[1]] != '\0') lenght[1]++;
replace.word = word;
bool chars_equals;
replace.stringpointer = 0; replace.wordpointer = 0;
for(replace.stringpointer = 0; replace.stringpointer < lenght[0]; replace.stringpointer++)
{
chars_equals = replace.Find();
if(chars_equals)
{
while(replace.wordpointer < lenght[1] && chars_equals)
{
chars_equals = replace.Find();
replace.wordpointer++;
}
if(chars_equals)
{
replaced_string = replaced_string + word_2;
replace.stringpointer += replace.wordpointer;
replace.wordpointer = 0; replace.stringpointer--; continue;
}
replace.wordpointer = 0;
}
replaced_string = replaced_string + replace.charstring[replace.stringpointer];
}
return replaced_string;
}// esimerkki miten funktiota käytetään:
string mj = "Auto ajaa kovaa";
mj = str_replace("kovaa", "hiljaa", mj);
cout << mj << endl; // tulostaa "Auto ajaa hiljaa"Sanottakoon vielä, että ei ole toteutettu ehkä parhaalla mahdollisella tavalla ja muuttujien nimet voisivat olla vähän kuvaavampia ;) mutta toimii jokatapauksessa.
Hyvä esimerkki.. en tiennytkään, että luokkia/ym. voi määritellä funktion sisälläkin.. :) Aina oppii jotain uutta..
Hyvää esimerkkiä tuosta ei kyllä saa tekemälläkään :) Melkoisen sekavaa koodia, ei varmasti vähiten erikoisen muuttujannimeämistavan takia.
Mikähän järki tässä on? Edelleenkin, C++:an standardikirjastot hoitavat saman asian ja vielä tehokkaammin.
string str = "jee moi joo";
str.replace(str.find("moi"), string("moi").length(), "öög");
string str_replace(string text, string toreplace, string replacewith)
{
while(text.find(toreplace)!=string::npos){
text = text.replace(text.find(toreplace), string(toreplace).length(), replacewith);
}
return text;
}tuollainen tekee kai saman.
Aihe on jo aika vanha, joten et voi enää vastata siihen.