Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 20.12.2009, 01:15   #1
Ueshua
 
Регистрация: 19.12.2009
Сообщений: 9
По умолчанию Удаление элементов строки s2 из строки s1

Задача.
Удалить из строки S1 символы, встречающиеся в строке S2.


Код:
#include <iostream.h>
#include <string.h>

void main()
{
int len; 
 char s[81];  
 char *s1,*s2;
    
cout << "Input the first string: "; 
cin.getline(s, 80); 
len = strlen(s);    
s1 = new char[ len + 1]; 
strcpy(s1, s); 
    
cout << "Input the second string: "; 
cin.getline(s, 80);  
len = strlen(s);
s2 = new char[len + 1];  
strcpy(s2, s);
    
    int i=0;
    while (s1[i]!='\0') 

    if (s1[i]==s2[i])    
    {  
       for (int j=i;s1[j]!='\0';j++) 
           s1[j]=s1[j+1];  
    }   
    else i++;  
    cout << endl << s1 << endl;  
}
Столкнулся с проблемой - при запуске происходит удаление только первого элемента из s1, если он совпадает с первым элементом s2. С последующими элементами никаких действий не происходит. Помогите понять, в чем ошибка. Заранее спасибо.
Ueshua вне форума Ответить с цитированием
Старый 20.12.2009, 03:01   #2
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

Код:
	for(i = 0 ; i < strlen(s1) ; i++)
	{
		for(int k = 0 ; k < strlen(s2) ; k++)
		{
			if(s1[i] == s2[k])
			{
				for (int j=i;s1[j]!='\0';j++) 
					s1[j]=s1[j+1];  
			}
		}
	}
вместо
Код:
    while (s1[i]!='\0') 

    if (s1[i]==s2[i])    
    {  
       for (int j=i;s1[j]!='\0';j++) 
           s1[j]=s1[j+1];  
    }   
    else i++;
Olejik вне форума Ответить с цитированием
Старый 20.12.2009, 12:49   #3
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Интересно, а можно схитрить и с помощью strtok разбить строку s1 на подстроки без ненужных символов s2, a затем все эти части забить в новую строку?
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 20.12.2009, 13:38   #4
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

можно, там в параметрах просто покажете строку s2 и все, программа вместо букв тех поставит '\0' и все... хотя лучше так, strtok лучше всего годится для выделения слов.
Olejik вне форума Ответить с цитированием
Старый 20.12.2009, 14:06   #5
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от Olejik Посмотреть сообщение
можно, там в параметрах просто покажете строку s2 и все, программа вместо букв тех поставит '\0' и все... хотя лучше так, strtok лучше всего годится для выделения слов.
Вот я и говорю, выделить "слова" и накидать их в другую строку...
Либо просто после strtok убрать из s2 все 0!
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление слов из строки С vivo89 Помощь студентам 4 13.11.2009 23:13
Удаление и добавление строки. Serror Общие вопросы C/C++ 6 11.10.2009 18:59
Удаление из строки program123 Помощь студентам 4 21.05.2009 12:52
Удаление строки Minton87 Общие вопросы Delphi 4 07.05.2009 02:32
Замена элементов строки MStorm Помощь студентам 10 14.03.2008 17:09