Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите, пожалуйсмта, как заменить одни символы в строке на другие? / 10 сообщений из 10, страница 1 из 1
26.05.2005, 07:54
    #33084354
ddS'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
Напр., есть массив со строкой "RTS-6544 GTRH4.W653-1" и в этой строке надо заменить буквы "R" на "F", "G" на "R", "T" на "S", "H" на "A". Как это сделать через if или условную операцию, но что бы код был поменьше???
...
Рейтинг: 0 / 0
26.05.2005, 10:27
    #33084578
ddS'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
Ну неужели никто не знает как это сделать???
Помогите, пожалуйста, на вас вся надежда!!!!
...
Рейтинг: 0 / 0
26.05.2005, 10:30
    #33084589
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
Код: 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.
#include <stdio.h>
#include <string.h>
int main(int argc,char *argv[])
	{
	char *input = "RTS-6544 GTRH4.W653-1";
	char *output,*p;
	int n = strlen(input);
	
	p=output = new char[n+ 1 ];
	strcpy(output, input);

	while(*p)
		{
		switch(*p)
			{
			case 'R':
				*p++ = 'F';
				continue;
			case 'G':
				*p++ = 'R';
				continue;
			case 'T':
				*p++ = 'S';
				continue;
			case 'H':
				*p++ = 'A';
				continue;
			default:
				++p;
				continue;
			}
		}

	puts(output);
	delete[] output;

	return  0 ;
	}


Или через STL

Код: 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.
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

int main(int argc,char *argv[])
	{
	char *intput = "RTS-6544 GTRH4.W653-1";
	char *output;
	
	string s(intput);

	replace(s.begin(), s.end(), 'R', 'F');
	replace(s.begin(), s.end(), 'G', 'R');
	replace(s.begin(), s.end(), 'T', 'S');
	replace(s.begin(), s.end(), 'H', 'A');

	output = new char[s.size()+ 1 ];
	strcpy(output, s.c_str());
	cout<<output;
	delete[] output;
	return  0 ;
	}
...
Рейтинг: 0 / 0
26.05.2005, 10:37
    #33084614
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
Если switch не подходит то можно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
int main(int argc,char *argv[])
	{
	char *input = "RTS-6544 GTRH4.W653-1";
	char *output,*p;
	int n = strlen(input);
	
	p=output = new char[n+ 1 ];
	strcpy(output, input);

	while(*p)
		{
		if(*p=='R') *p++ = 'F'; else
		if(*p=='G') *p++ = 'R'; else
		if(*p=='T') *p++ = 'S'; else
		if(*p=='H') *p++ = 'A'; else
		++p;
		}

	puts(output);
	delete[] output;

	return  0 ;
	}
...
Рейтинг: 0 / 0
26.05.2005, 10:39
    #33084620
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
ddS'Напр., есть массив со строкой "RTS-6544 GTRH4.W653-1" и в этой строке надо заменить буквы "R" на "F", "G" на "R", "T" на "S", "H" на "A". Как это сделать через if или условную операцию, но что бы код был поменьше???

Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
char str[]="RTS-6544 GTRH4.W653-1"
...
for(int i= 0 ;i<strlen(str);i++)
{
 switch (str[i]){
 case 'R':
   str[i]='F';
   break;
 case 'G':
   str[i]='R';
   break;
 case 'T':
  str[i]='S';
  break;
 case 'H': 
  str[i]='A';
  break;
}
}
Это решение "в лоб", но по-другому, извини, не получится. Уж слишком неформализованное задание дано...
...
Рейтинг: 0 / 0
26.05.2005, 10:39
    #33084622
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <iostream>

char *chrtran(char *in, char const *src, char const *dst)
{
	for(char *h = in; *h; h++)
		for(char const *si = src, *di = dst; *si && *di; si++, di++ )
			if( *h == *si )
				*h = *di;
	return in;
}

int main()
{
	char buffer[] = "RTS-6544 GTRH4.W653-1";
	char const *s = "RGTH";
	char const *d = "FRSA";

	std::cout << buffer << '\n';
	std::cout << chrtran(buffer, s, d) << '\n';
}
...
Рейтинг: 0 / 0
26.05.2005, 11:58
    #33084832
ddS'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
ВСЕМ большое спасибо за помощь!!!
...
Рейтинг: 0 / 0
04.07.2005, 17:51
    #33148684
Эндрю В
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
ddS'ВСЕМ большое спасибо за помощь!!!
а если через STL или подобное, но при условии не
char*
а wchar_t *
???
...
Рейтинг: 0 / 0
06.07.2005, 12:38
    #33151943
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
Эндрю В ddS'ВСЕМ большое спасибо за помощь!!!
а если через STL или подобное, но при условии не
char*
а wchar_t *
???

Точно так же.... Например:

Код: 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.
wstring& ch_str(wstring &src, const wstring &s1, const wstring &s2) 
{
	typedef wstring::iterator WIt;
	typedef wstring::const_iterator WCIt;
	map<wchar_t, wchar_t> wMap;

	for(WCIt it1 = s1.begin(), it2 = s2.begin(); it1 != s1.end() && it2 != s2.end(); it1++, it2++)
		wMap[*it1] = *it2;

	for(WIt it = src.begin(); it != src.end(); it++)
		if(wMap.find(*it) != wMap.end())
			*it = wMap[*it];
	return src;
}

...

wstring s = L"ABCD";
wstring s1 = L"AD";
wstring s2 = L"MN";

s = ch_str(s, s1, s2);
wcout << s << endl << s1 << endl << s2 << endl;


Хотя, чтобы не метаться между char, wchar_t можно и сразу шаблон:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template<class T> basic_string<T>& ch_strT(basic_string<T> &src, 
const basic_string<T> &s1, 
const basic_string<T> &s2) 
{
	typedef basic_string<T>::iterator WIt;
	typedef basic_string<T>::const_iterator WCIt;
	map<T, T> wMap;

	for(WCIt it1 = s1.begin(), it2 = s2.begin(); it1 != s1.end() && it2 != s2.end(); it1++, it2++)
		wMap[*it1] = *it2;

	for(WIt it = src.begin(); it != src.end(); it++)
		if(wMap.find(*it) != wMap.end())
			*it = wMap[*it];
	return src;
}
...
Рейтинг: 0 / 0
06.07.2005, 15:06
    #33152405
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйсмта, как заменить одни символы в строке на другие?
Блин! Фундаменталисты. Чел. просил всего лишь буквы заменить!
Раздули до шаблонов!

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


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