Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
1

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

19.07.2013, 13:55. Просмотров 1943. Ответов 5
Метки нет (Все метки)

Подскажите пожалуйста как мне поправить ошибку?
Написал такую функцию. Всё работает правильно (т.е. он правильно находит подстроку, считает длину нового массива)
НО:
В коде ниже есть мини ошибочка:
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 минуту
Киньте хотябы ссылку на статью с алгоритмом
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2013, 13:55
Ответы с готовыми решениями:

Замена подстроки в текстовом файле на другую строку
Разработайте программу replace.exe, выполняющую замену подстроки в текстовом файле на другую...

Функция: замена подстроки в строке на заданную строку
Помогите пожалуйста с данной задачей: Реализовать на языке C функцию замены подстроки в строке на...

Найти в исходной строке все вхождения заданной подстроки и заменить их на другую строку
Найти в исходной строке все вхождения (но не более девяти) заданной подстроки и заменить их на...

Замена одной подстроки на другую
Есть ли функция, которая может заменить все вхождения подстроки strl на подстроку strl2? Если нет,...

5
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
19.07.2013, 14:42 2
C++
1
if (isReplace_[i-j] = isMatch(lookingFor_, tmp))
Тут должно быть два знака '=', т.е. ==
А вообще, старичок, локализуй свою проблему...
0
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
19.07.2013, 15:12  [ТС] 3
lazybiz, ноуп. Здесь я как раз присваиваю значение bool своему массиву заменять не заменять.
Проблема только в индексе
0
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
19.07.2013, 15:22 4
PakistanCode, согласен, не досмотрел...
Тогда:
* локализуй проблему по-максимому
* будь добр, скажи что делает функция isMatch
* и последнее, самое главное: "подскажите пожалуйста как подправить высчитывание индекса чтобы true (заменить) вставало на нужное место." - никому ни о чем не говорит.
0
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
19.07.2013, 15:32  [ТС] 5
lazybiz, в общем я не знаю как объяснить ;( буду всё заново переписывать
найти бы просто метод попроще
0
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
20.07.2013, 05:59 6
Вот куча алгоритмов, как это можно сделать http://www-igm.univ-mlv.fr/~lecroq/string/
Вот что дал поиск по киберфоруму Замена подстроки в строке
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2013, 05:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Замена подстроки в строке
В строке нужно заменить подстроку aaa на 3(a). Помогите написать код без использования string.

Замена подстроки в строке
Так как не нашел алгоритм стемминга для C++, то пришлось что-то придумывать самому. Так вот есть...

Замена подстроки в строке
Дана строка. Заменить все подстроки “xz2” на запятые без подключения дополнительных библиотек....

Замена подстроки в строке
здесь у меня такая проблема возникла мне нужно заменить все &quot;were&quot; на &quot;are&quot; но &quot;are&quot; меньше на 1...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.