Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / не понял как работает replace / 17 сообщений из 17, страница 1 из 1
18.10.2007, 20:05:16
    #34879210
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
смотрел здесь: ссылка С++
у меня есть строка
Код: plaintext
string str = "asdfghadfgag";
необходимо все символы 'а' заменить на символ '1'
а как сделать - если еще необходимо заменить символы 'd' на '2'
...
Рейтинг: 0 / 0
18.10.2007, 20:25:39
    #34879241
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
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
18.10.2007, 20:41:20
    #34879266
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
авторПосимвольно её переберите...
с помощью цикла не интересно,
мне непонятно как это сделать с использованием replace
объявляю итератор, что дальше?
...
Рейтинг: 0 / 0
18.10.2007, 21:00:28
    #34879284
daevaorn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
akalend авторПосимвольно её переберите...
с помощью цикла не интересно,
мне непонятно как это сделать с использованием replace
объявляю итератор, что дальше?
ничего. replace для другого - он заменяет подстроку на другую, при этом нужно задать точный интервал.
цикл в твоём случае подходит больше.
...
Рейтинг: 0 / 0
18.10.2007, 21:05:20
    #34879292
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
авторичего. replace для другого - он заменяет подстроку на другую, при этом нужно задать точный интервал.
цикл в твоём случае подходит больше.жаль,
а я думал, что replace поможет :(
...
Рейтинг: 0 / 0
18.10.2007, 21:55:37
    #34879346
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
Поможет, только не тот
std::replace_if(str.begin(), str.end(), bind2nd(equals<char>(), 'a'), '1');
...
Рейтинг: 0 / 0
18.10.2007, 22:14:21
    #34879362
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
спасибо,
я то чуствую, что ларчик-то просто открывается...
а вот как - не пойму...
...
Рейтинг: 0 / 0
19.10.2007, 16:05:35
    #34881436
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
все-таки в моем случае нужен replace,
так как необходимо заменить "\n" на "%0A" и ";" на "%3B"
не хотелось бы выполнять два раза одну и туже операцию.
...
Рейтинг: 0 / 0
19.10.2007, 18:43:32
    #34881919
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
Тогда стоит посмотреть на
boost::regex_replace
...
Рейтинг: 0 / 0
19.10.2007, 19:02:24
    #34881972
не понял как работает replace
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
19.10.2007, 19:16:01
    #34881989
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
А зачем такой заворот кишок? не проще взять и записать все std::ostingstream
...
Рейтинг: 0 / 0
19.10.2007, 20:17:09
    #34882058
не понял как работает replace
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
19.10.2007, 21:54:00
    #34882127
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
круто;

век живи - век учись.
...
Рейтинг: 0 / 0
19.10.2007, 21:57:59
    #34882129
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
но функцию str.replace() ни как нельзя использовать??
...
Рейтинг: 0 / 0
20.10.2007, 12:37:55
    #34882407
не понял как работает replace
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
22.10.2007, 19:10:54
    #34886118
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
решил сделать так,
с потоком, на данном этапе для меня слишком сложно.
Код: 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
23.10.2007, 18:50:34
    #34889119
quaid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понял как работает replace
BCB: функция StringReplace()

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


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