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

Поиск подстроки в строке и замена её на другую строку - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
19.07.2013, 13:55     Поиск подстроки в строке и замена её на другую строку #1
Подскажите пожалуйста как мне поправить ошибку?
Написал такую функцию. Всё работает правильно (т.е. он правильно находит подстроку, считает длину нового массива)
НО:
В коде ниже есть мини ошибочка:
C++
1
if (isReplace_[i-j] = isMatch(lookingFor_, tmp))    ///блин ток тут переделать чтобы индекс норм считал
массив из bool isPeplace - вспомогательный. Нужен он для того чтобы когда я делаю новый массив ( смотрю по нему надо или нет вставлять другую строку (на которую нужно заменить подстроку))

Никакими стандартными функциями пользоваться нельзя, всё своими руками


А сам вопрос именно вот здесь:
C++
1
isReplace_[i-j]
- подскажите пожалуйста как подправить высчитывание индекса чтобы true (заменить) вставало на нужное место.

Пример:
исх: 00100
найти: 00
заменить на: 222
выходит: 2221222
Как должен выглядеть мой массив:
да нет нет нет да нет


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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
void substituteStr()///////доделать
    {
        if (string)
        {
            char buf[512];
            cout << "Find: ";
            _flushall();
            gets_s(buf, 512);
 
            int lenght_ = strlen(buf);
 
            char* lookingFor_;
            lookingFor_ = new char[lenght_ + 1];
            for (int i = 0; i < strlen(buf); i++)
                lookingFor_[i] = buf[i];
 
            lookingFor_[lenght_] = '\0';
 
            cout << "Substitude to: ";
            _flushall();
            gets_s(buf, 512);
 
            lenght_ = strlen(buf);
 
            char* substituteTo_;
            substituteTo_ = new char[lenght_ + 1];
            for (int i = 0; i < lenght_; i++)
                substituteTo_[i] = buf[i];
 
            substituteTo_[lenght_] = '\0';
 
            char* tmp = new char[strlen(lookingFor_) + 1];
            tmp[strlen(lookingFor_)] = '\0';
 
            int hlp = 0;
            int otherLetters = 0;
 
            bool* isReplace_ = new bool[strlen(string)];
 
            for (int i = 0; i < strlen(string); i++)
                isReplace_[i] = false;
 
            int j = 0;
            for (int i = 0, j; i < strlen(string); j = 0)
            {
                for (j=0 ; j < strlen(lookingFor_); j++)
                {
                    tmp[j] = string[i];
                    i++;
                }
                if (isReplace_[i-j] = isMatch(lookingFor_, tmp))    ///блин ток тут переделать чтобы индекс норм считал
                    hlp++;
                else
                    otherLetters++, i++;
            }
            
            char* result = new char[otherLetters + (hlp*strlen(substituteTo_)) + 1];
            result[otherLetters + (hlp*strlen(substituteTo_))] = '\0';
 
            for (int i = 0; i < otherLetters + (hlp*strlen(substituteTo_)); i++)
            {
                if (isReplace_[i])
                {
                    for (int j = 0; j < strlen(substituteTo_); j++)
                    {
                        result[i] = substituteTo_[j];
                    }
                }
                else
                {
                    result[i] = string[i];
                }
            }
            recreateStr(result);
        }
        else cout << "String is empty!";
        cout << endl;
    }
Добавлено через 31 минуту
Киньте хотябы ссылку на статью с алгоритмом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 14:42     Поиск подстроки в строке и замена её на другую строку #2
C++
1
if (isReplace_[i-j] = isMatch(lookingFor_, tmp))
Тут должно быть два знака '=', т.е. ==
А вообще, старичок, локализуй свою проблему...
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
19.07.2013, 15:12  [ТС]     Поиск подстроки в строке и замена её на другую строку #3
lazybiz, ноуп. Здесь я как раз присваиваю значение bool своему массиву заменять не заменять.
Проблема только в индексе
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 15:22     Поиск подстроки в строке и замена её на другую строку #4
PakistanCode, согласен, не досмотрел...
Тогда:
* локализуй проблему по-максимому
* будь добр, скажи что делает функция isMatch
* и последнее, самое главное: "подскажите пожалуйста как подправить высчитывание индекса чтобы true (заменить) вставало на нужное место." - никому ни о чем не говорит.
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
19.07.2013, 15:32  [ТС]     Поиск подстроки в строке и замена её на другую строку #5
lazybiz, в общем я не знаю как объяснить ;( буду всё заново переписывать
найти бы просто метод попроще
Kant
 Аватар для Kant
24 / 24 / 8
Регистрация: 15.05.2013
Сообщений: 213
20.07.2013, 05:59     Поиск подстроки в строке и замена её на другую строку #6
Вот куча алгоритмов, как это можно сделать http://www-igm.univ-mlv.fr/~lecroq/string/
Вот что дал поиск по киберфоруму Замена подстроки в строке
Yandex
Объявления
20.07.2013, 05:59     Поиск подстроки в строке и замена её на другую строку
Ответ Создать тему
Опции темы

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