Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

std::string i replace

2 views
Skip to first unread message

wiz

unread,
Dec 18, 2009, 6:17:43 PM12/18/09
to
Czy istnieje prosty sposób, żeby podmienić w tekście zawartym w
sdt::string dowolny fragment na dowolny inny? Coś a'la MFC-owe
CString::Replace?

Tomasz Sowa

unread,
Dec 19, 2009, 4:42:25 AM12/19/09
to
Dnia Sat, 19 Dec 2009 00:17:43 +0100, wiz napisaďż˝(a):

> Czy istnieje prosty spos�b, �eby podmieni� w tek�cie zawartym w
> sdt::string dowolny fragment na dowolny inny? Coďż˝ a'la MFC-owe
> CString::Replace?

http://www.cppreference.com/wiki/string/replace


--
http://www.ttmath.org

wiz

unread,
Dec 19, 2009, 3:28:45 PM12/19/09
to
W dniu 2009-12-19 10:42, Tomasz Sowa pisze:
> Dnia Sat, 19 Dec 2009 00:17:43 +0100, wiz napisał(a):
>
>> Czy istnieje prosty sposób, żeby podmienić w tekście zawartym w
>> sdt::string dowolny fragment na dowolny inny? Coś a'la MFC-owe
>> CString::Replace?
>
> http://www.cppreference.com/wiki/string/replace
>
>

No właśnie ja nie widzę tam odpowiednika. Chodzi mi dokładnie o takie coś:

char *str = {".X..X...X"};

strReplace(str, "X", "YY");

//str teraz ma byc: ".YY..YY...YY"

Może jest jakiś ciekawy myk z kombinacją find/replace, który może to
zastąpić?


ps.
Nie problem takie coś napisać ale wydaje mi się to tak typowe zadanie,
że dziwi mnie brak w stl-u odpowiedniej funkcji/metody. Myślę, że nawet
powinno to być w <algorithm>, bo problem można uogólnić na wiele kontenerów.

Tomasz Sowa

unread,
Dec 19, 2009, 5:52:01 PM12/19/09
to
Dnia Sat, 19 Dec 2009 21:28:45 +0100, wiz napisaďż˝(a):

> No w�a�nie ja nie widz� tam odpowiednika. Chodzi mi dok�adnie o takie co�:


>
> char *str = {".X..X...X"};
> strReplace(str, "X", "YY");
> //str teraz ma byc: ".YY..YY...YY"

Najpierw pytasz o std::string a teraz pokazujesz tablic� znak�w. Z tablic�
znak�w jest gorzej dlatego �e ona ma okre�lony rozmiar kt�rego nie wolno
przekroczy�. Je�li wynikowy string mia�by by� d�u�szy ni� wielko��
zadeklarowanej tablicy to trzebaby najpierw realokowaďż˝ tablicďż˝. A to
wszystko masz na dzieďż˝ dobry w typie std::string.

#include <string>
#include <iostream>

int main()
{
std::string str = ".X..X...X";
std::string patt = "X";
std::string dest = "YY";
std::string::size_type i = 0;

while( (i = str.find(patt, i)) != std::string::npos )
{
str.replace(i, patt.size(), dest);
i += dest.size();
}

std::cout << str << std::endl;
}


--
http://www.ttmath.org

wo3kie

unread,
Dec 20, 2009, 3:38:16 PM12/20/09
to
0 new messages