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.