Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: StringReplace C++:lle

tomaattigeeni [24.12.2002 16:02:28]

#

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"

tomaattigeeni [25.12.2002 14:25:37]

#

Sanottakoon vielä, että ei ole toteutettu ehkä parhaalla mahdollisella tavalla ja muuttujien nimet voisivat olla vähän kuvaavampia ;) mutta toimii jokatapauksessa.

progo [26.12.2002 14:29:16]

#

Hyvä esimerkki.. en tiennytkään, että luokkia/ym. voi määritellä funktion sisälläkin.. :) Aina oppii jotain uutta..

thefox [26.12.2002 18:41:56]

#

Hyvää esimerkkiä tuosta ei kyllä saa tekemälläkään :) Melkoisen sekavaa koodia, ei varmasti vähiten erikoisen muuttujannimeämistavan takia.

Anzuhan [01.01.2004 11:40:54]

#

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");

peraa [23.07.2005 16:45:57]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta