Форум программистов, компьютерный форум CyberForum.ru

Удалить из строки s1 все символы, встречающиеся в строке s2. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
iggy fourty-one
0 / 0 / 0
Регистрация: 02.06.2011
Сообщений: 8
03.06.2011, 08:43     Удалить из строки s1 все символы, встречающиеся в строке s2. #1
Удалить из строки s1 все символы, встречающиеся в строке s2
А вот здесь как подсчитать кол-во удаленных символов?
Пробовал поставить в начало
C++
1
int z=0
; и поставить инкремент после условия, но ничего не получается... подскажите пожалуйста, что нужно дописать, и куда)

C++
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
 
#include <string.h>
 
int main()
{
        // Говорим по-русски!
        setlocale(LC_ALL, "RUS");
 
        char s1[512], s2[256];
        
        // Введём строки
        cout << "Vvedite stroky: ";
        cin.getline(s1, 512);
 
        cout << "Vvedite spisok simvolov dlya filtracii: ";
        cin.getline(s2, 256);
 
        // Отфильтруем символы. Принцип: проходим по всем символам строки s1 до \0,
        // если текущий символ входит в состав s2, копируем остаток строки на это место
        char* sp = s1;
        while(*sp)
                if(strchr(s2, *sp))                     // Проверка вхождения символа в s2
                        strcpy(sp, sp+1);               // Копирование остатка строки
                else
                        ++sp;                                   // Переход к следующему символу
 
        // Вывод результата
        cout << s1;
        cin.get();
 
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 08:43     Удалить из строки s1 все символы, встречающиеся в строке s2.
Посмотрите здесь:

удалить из строки все символы встречающиеся более одного раза C++
C++ Обработка символьных данных(удалить в строке все символы, кроме цифр)
C++ Определить длину строки,удалить из строки все символы, которые равны заданному
C++ Удалить из первой строки все символы, содержащиеся во второй строке
C++ Удалить из первой строки все символы, содержащиеся во второй строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.06.2011, 09:01     Удалить из строки s1 все символы, встречающиеся в строке s2. #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
#define size 256
void erase(char * str,unsigned index){
    while (str[index])
        str[index]=str[index+++1];
}
int main(){
    char s1[size],s2[size/2];
    std::cin.getline(s1,size);
    std::cin >> s2;
    for (int i=0; s1[i];i++)
        if (strchr(s2,s1[i])) erase(s1,i--);
    std::cout << s1;
    return 0;
}
tapka
3 / 3 / 1
Регистрация: 05.12.2009
Сообщений: 13
03.06.2011, 09:04     Удалить из строки s1 все символы, встречающиеся в строке s2. #3
C++
1
2
3
4
5
6
7
8
9
int z=0;
 while(*sp)
 if(strchr(s2, *sp))
{    
strcpy(sp, sp+1);
z++;
}            
else
++sp;
вот так не получается?
iggy fourty-one
0 / 0 / 0
Регистрация: 02.06.2011
Сообщений: 8
03.06.2011, 09:18  [ТС]     Удалить из строки s1 все символы, встречающиеся в строке s2. #4
Цитата Сообщение от tapka Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
int z=0;
 while(*sp)
 if(strchr(s2, *sp))
{    
strcpy(sp, sp+1);
z++;
}            
else
++sp;
вот так не получается?
Как раз это и пробовал, пишет ошибку
error C2181: illegal else without matching if

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
#define size 256
void erase(char * str,unsigned index){
    while (str[index])
        str[index]=str[index+++1];
}
int main(){
    char s1[size],s2[size/2];
    std::cin.getline(s1,size);
    std::cin >> s2;
    for (int i=0; s1[i];i++)
        if (strchr(s2,s1[i])) erase(s1,i--);
    std::cout << s1;
    return 0;
}
а как вывести на экран? какую переменную писать в cout <<?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.06.2011, 09:21     Удалить из строки s1 все символы, встречающиеся в строке s2. #5
Цитата Сообщение от iggy fourty-one Посмотреть сообщение
а как вывести на экран? какую переменную писать в cout <<?
В смысле? Там же уже стоит s1. s1-это исходная строка, s2-символы на удаление, после цикла в s1 нету символов s2, ее и выводим.
iggy fourty-one
0 / 0 / 0
Регистрация: 02.06.2011
Сообщений: 8
03.06.2011, 09:23  [ТС]     Удалить из строки s1 все символы, встречающиеся в строке s2. #6
Цитата Сообщение от diagon Посмотреть сообщение
В смысле? Там же уже стоит s1. s1-это исходная строка, s2-символы на удаление, после цикла в s1 нету символов s2, ее и выводим.
Да, это понятно, спасибо, но мне помимо этого нужно чтобы программа выводила количество удаленных символов..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 09:34     Удалить из строки s1 все символы, встречающиеся в строке s2.
Еще ссылки по теме:

C++ В строке удалить все символы не являющиеся буквами или цифрами
Задана строка, символы которой могут повторяться. Нужно удалить все символы строки с помощью наименьшего количества вычеркиваний C++
C++ Из произвольной строки символов удалить все повторно встречающиеся символы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.06.2011, 09:34     Удалить из строки s1 все символы, встречающиеся в строке s2. #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
#define size 256
void erase(char * str,unsigned index){
        while (str[index])
                str[index]=str[index+++1];
}
int main(){
        char s1[size],s2[size/2];
        std::cin.getline(s1,size);
        std::cin >> s2;
        int count=0;
        for (int i=0; s1[i];i++)
                if (strchr(s2,s1[i])) {erase(s1,i--); count++;}
        std::cout << s1;
        std::cout << "\nNumber of deleted symbols: " << count; //извиняюсь за кривой инглишь
        return 0;
}
Yandex
Объявления
03.06.2011, 09:34     Удалить из строки s1 все символы, встречающиеся в строке s2.
Ответ Создать тему
Опции темы

Текущее время: 21:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru