powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / не понял как работает replace
17 сообщений из 17, страница 1 из 1
не понял как работает replace
    #34879210
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотрел здесь: ссылка С++
у меня есть строка
Код: plaintext
string str = "asdfghadfgag";
необходимо все символы 'а' заменить на символ '1'
а как сделать - если еще необходимо заменить символы 'd' на '2'
...
Рейтинг: 0 / 0
не понял как работает replace
    #34879241
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akalend wrote:

> смотрел здесь: ссылка С++
И что там непонятного?

> у меня есть строка
> string str = "asdfghadfgag";
> необходимо все символы 'а' заменить на символ '1'
> а как сделать - если еще необходимо заменить символы 'd' на '2'
Посимвольно её переберите...
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
не понял как работает replace
    #34879266
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПосимвольно её переберите...
с помощью цикла не интересно,
мне непонятно как это сделать с использованием replace
объявляю итератор, что дальше?
...
Рейтинг: 0 / 0
не понял как работает replace
    #34879284
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
akalend авторПосимвольно её переберите...
с помощью цикла не интересно,
мне непонятно как это сделать с использованием replace
объявляю итератор, что дальше?
ничего. replace для другого - он заменяет подстроку на другую, при этом нужно задать точный интервал.
цикл в твоём случае подходит больше.
...
Рейтинг: 0 / 0
не понял как работает replace
    #34879292
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторичего. replace для другого - он заменяет подстроку на другую, при этом нужно задать точный интервал.
цикл в твоём случае подходит больше.жаль,
а я думал, что replace поможет :(
...
Рейтинг: 0 / 0
не понял как работает replace
    #34879346
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поможет, только не тот
std::replace_if(str.begin(), str.end(), bind2nd(equals<char>(), 'a'), '1');
...
Рейтинг: 0 / 0
не понял как работает replace
    #34879362
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо,
я то чуствую, что ларчик-то просто открывается...
а вот как - не пойму...
...
Рейтинг: 0 / 0
не понял как работает replace
    #34881436
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все-таки в моем случае нужен replace,
так как необходимо заменить "\n" на "%0A" и ";" на "%3B"
не хотелось бы выполнять два раза одну и туже операцию.
...
Рейтинг: 0 / 0
не понял как работает replace
    #34881919
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда стоит посмотреть на
boost::regex_replace
...
Рейтинг: 0 / 0
не понял как работает replace
    #34881972
akalendвсе-таки в моем случае нужен replace,
так как необходимо заменить "\n" на "%0A" и ";" на "%3B"
не хотелось бы выполнять два раза одну и туже операцию.

Тогда ручками, по-простому:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
#include <iostream>
#include <algorithm>
#include <list>


struct EncChar
{
	enum Idx { start =  0 , count = sizeof("%XX") };
	typedef char HolderType[count];
	EncChar() { m_text[ 0 ] =  0 ; }
	char const* ToString() const { return m_text; }
	void operator =(HolderType const &a) { memmove(m_text, a, count); }
	void operator =(char const x) { m_text[ 0 ] = x, m_text[ 1 ] =  0 ; }

private:
	HolderType m_text;
};

struct HtmlEncode 
{
	EncChar operator ()(char x) const
	{
		EncChar enc;
		switch (x)
		{
		case '\n':
			enc = "%0A";
			break;

		case ';':
			enc = "%3B";
			break;

		case 'd':
			enc = "XXX";
			break;

		default:
			enc = x;
		}
		return enc;
	}
};


int main()
{
	using namespace std;

	string s = "as\r\rdfg\nhadf;gag";
	printf("s = \"%s\"\n", s.c_str());
	list< EncChar > t;
	transform(s.begin(), s.end(), back_inserter(t), HtmlEncode());
	string s_new;
	s_new.reserve(s.size() *  2 );
	for (list< EncChar >::const_iterator i_enc = t.begin(); i_enc != t.end(); ++i_enc) {
		s_new.append(i_enc->ToString());
	}

	printf("s_new = \"%s\"\n", s_new.c_str());
	system("pause");
}
...
Рейтинг: 0 / 0
не понял как работает replace
    #34881989
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем такой заворот кишок? не проще взять и записать все std::ostingstream
...
Рейтинг: 0 / 0
не понял как работает replace
    #34882058
blindedА зачем такой заворот кишок? не проще взять и записать все std::ostingstream
Действительно так-то, оно тово - проще будет!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
#include <iostream>
#include <algorithm>
#include <iterator>


struct EncChar
{
	enum Idx { count = sizeof("%XX") };
	typedef char HolderType[count];
	EncChar() { m_text[ 0 ] =  0 ; }
	char const* ToString() const { return m_text; }
	void operator =(HolderType const &a) { memmove(m_text, a, count); }
	void operator =(char const x) { m_text[ 0 ] = x, m_text[ 1 ] =  0 ; }

private:
	HolderType m_text;
};

struct HtmlEncode 
{
	EncChar operator ()(char x) const
	{
		EncChar enc;
		switch (x)
		{
		case '\n':
			enc = "%0A";
			break;

		case ';':
			enc = "%3B";
			break;

		case 'd':
			enc = "XXX";
			break;

		default:
			enc = x;
		}
		return enc;
	}
};

class InsEncodedIterator
	: public std::iterator< std::output_iterator_tag, void, void, void, void >
{	
public:
	explicit InsEncodedIterator(std::string &s) : m_ps(&s) {}
	InsEncodedIterator& operator =(EncChar const &v) { m_ps->append(v.ToString()); return (*this); }
	InsEncodedIterator& operator *() { return (*this); }
	InsEncodedIterator& operator ++() { return (*this); }
	InsEncodedIterator operator ++(int) { return (*this); }

protected:
	std::string *m_ps;
};


int main()
{
	using namespace std;

	string s = "as\r\rdfg\nhadf;gag", s_new;
	printf("s = \"%s\"\n", s.c_str());
	s_new.reserve(s.size() *  2 );
	transform(s.begin(), s.end(), InsEncodedIterator(s_new), HtmlEncode());

	printf("s_new = \"%s\"\n", s_new.c_str());
	system("pause");
}
...
Рейтинг: 0 / 0
не понял как работает replace
    #34882127
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
круто;

век живи - век учись.
...
Рейтинг: 0 / 0
не понял как работает replace
    #34882129
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но функцию str.replace() ни как нельзя использовать??
...
Рейтинг: 0 / 0
не понял как работает replace
    #34882407
akalendно функцию str.replace() ни как нельзя использовать??
Не знаю - может как-то и можно, хотя она вроде что-то одно заменяет. А почему именно функция string::replace? Модернизировать строку "на месте" медленнее, чем слепить новую и обменяться на выходе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
int main()
{
	using namespace std;

	string s = "as\ndfg\nhadf;gag";
	printf("s = \"%s\"\n", s.c_str());
	{
		string s_enc;
		s_enc.reserve(s.size() *  2 );
		transform(s.begin(), s.end(), InsEncodedIterator(s_enc), HtmlEncode());
		s.swap(s_enc);
	}
	printf("s = \"%s\"\n", s.c_str());
	system("pause");
}
...
Рейтинг: 0 / 0
не понял как работает replace
    #34886118
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решил сделать так,
с потоком, на данном этапе для меня слишком сложно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
                                int pos = str.find("\n");
                                
                                while ( pos >  0 )
                                {
                                    str.replace(pos,  1 , "%0A" );
                                    pos = str.find("\n");
                                }

Спасибо всем, кто откликнулся
...
Рейтинг: 0 / 0
не понял как работает replace
    #34889119
Фотография quaid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BCB: функция StringReplace()

а еще билдер ругаете :)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / не понял как работает replace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]