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

В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Метод многих поверхностей http://www.cyberforum.ru/cpp-beginners/thread660897.html
Подскажите, пожалуйста, где можно почитать о методе "многих поверхностей" (multi-surface method). С его помощью нужно будет построить сетку на области.
C++ Задача на сортировку массива методом вставки на С++ Помогите, пожалуйста, решить задачу. Отсортируйте по возрастанию методом вставки одномерный целочисленный массив, введенный с клавиатуры. Выведите на экран исходный и отсортированный массивы. (Сортировка вставками: пусть первые k элементов массива уже упорядочены по неубыванию. Берется (k+1)-й элемент и размещается среди первых k элементов так, чтобы упорядоченными оказались уже k+1 первых... http://www.cyberforum.ru/cpp-beginners/thread660889.html
Система счисления - выводится лишний ноль C++
Добрый день! Вопрос мой состоит в следующем: Много видел уже готовых программ по переводу чисел из одной системы в другую,но захотел сделать сова алгоритм. Я использую цикл do/while, считаю лучшим вариантом(если не так поправьте, пожалуйста) Вот что получилось: a - вводимое число; b - остаток от деления; cin >> a; a = a/2; b = a%2;
C++ что-то не то с функциями!
#include <iostream> #include <conio.h> #include <math.h> #include <fstream> #include <iomanip> using namespace std; double n=1; double m=0,x=0,z=0,s=0,a=0,b=0,h=0,q=0,w=0,e=0,zz=0,p=0; ifstream in; ofstream out;
C++ Программа для вычисления выражений http://www.cyberforum.ru/cpp-beginners/thread660845.html
A= min(sin x, min (y,x)) Max(x^y,y) (не использовать макрокоманд Max и Min)
C++ Подскажите с изучением С++ Я хотел бы изучить язык С++, подскажите пару книг или видеокурсов по С++. Заранее спасибо. подробнее

Показать сообщение отдельно
AnreyKazakov
Заблокирован
02.10.2012, 01:29     В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась
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
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
using namespace std;
 
int main()
{
    setlocale(0,"Rus");
 
    int i,j,k;
    char a1[255], a2[255], b[255];
    k=0;
    j=1;
    
    cout<<"Введите строку: ";
    gets(a1);
    cout<<"Введите подстроку: ";
    gets(b);
    for (i=0; i<strlen(a1); i++)
    {
        if (a1[i]!=b[0])
        {
            a2[k]=a1[i];
            ++k;
        }
        else
        {
            j=0;
           while((j<strlen(b))&&(a1[i]==b[j])){
                ++i;
                ++j;
                }
           if(j<strlen(b)){
           i-=j;
           a2[k]=a1[i];
           ++k;
           }else{--i;}
 j=0;
        }
    }
    cout<<"\nОтвет:"<<endl;
    for (i=0; i<k; i++)
        cout<<a2[i];
    _getch();
}
У меня вот такое пашет, чуть подправил

Добавлено через 32 минуты
Закомментирую кусок этот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
else /*else срабатывает, если встретили первый одинаковый симол*/
        {
            j=0; /*Зачем-то обнуляем j, можно было в принципе инициализировать нулем в начале*/
           while((j<strlen(b))&&(a1[i]==b[j])){ /*Пока соотв символы равны и пока индекс b*/
/*(проверяемого слова) не равен размеру этого слова */
                ++i;/*прибавляем индекс исходной строки*/
                ++j;/*прибавляем индекс строки проверки*/
                }
           if(j<strlen(b)){ /*проверяем дошли ли индексом до конца слова*/
           i-=j;/*если нет, то возвращаем индекс исходной строки на место с которого */
/*начали сравнивать строки в цикле while сверху*/
           a2[k]=a1[i];/*присваиваем элемент с которого начали сравнение*/
/*потому что строки не равны (как минимум один символ )*/
           ++k; /*соотв увеличиваем индек новой строки*/
           }else{--i;}/*а если равны, то вычтем из индекса основной строки 1 , т к*/
/*когда сравнивали в цикле while посимвольно строки то уже ушли на последней итерации*/
/*за пределы слова b (j==strlen(b)), значит и i уже тоже удрал вперед, тк прибавляли их вместе*/
 j=0;/*обнуляем индекс b чтобы сравнивать с 1 символом*/
        }
В итоге если слова равны полностью =) ну то есть все соотв символы, то просто пропускаем эти символы в исходной строке, а если равны не полностью, то все записываем....
 
Текущее время: 11:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru