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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пользователь вводит имя файла, программа выводит содержимое файла с указанием номеров строк. http://www.cyberforum.ru/cpp-beginners/thread925666.html
Пользователь вводит имя файла, программа выводит содержимое файла с указанием номеров строк. Если пользователь вводит не существующий файл, программа требует ввести имя файла заново. Help me. Добавлено через 1 минуту Для этой задачи нужно применить файловые потоки класса fstream В названии темы кратко отражается ее основная суть.
C++ Буква из нижнего регистра в верхний добрый день, цель задачи: Преобразование букв нижнего регистра в верхний регистр, используя неконстантный указатель на неконстантные данные. #include <windows.h> #include <iostream> using std::cout; using std::cin; using std::endl; #include <cctype> http://www.cyberforum.ru/cpp-beginners/thread925660.html
C++ упростить конструкцию
for (int i = 0, c_c = computer_player, c_h = human_player, r; i < human_player + computer_player; i++) { r = rand() % 2; string name; Cplayer *tmp_player_ptr; switch(r) { case 0: if (c_h) { tmp_player_ptr = new Chuman; c_h--;
Варианты перевода из 10 СС в 2-ую C++
у меня есть такой вариант перевода // lab_work_4.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <time.h> #include <string.h> #include <math.h> using namespace std;
C++ Как переопределить "operator <<" для cout? http://www.cyberforum.ru/cpp-beginners/thread925618.html
использую RAD 2010 (MVS 2010 стал сильно тормозить и я перешёл). setlocale не помогает, функция char bufRus; char* Rus(const char* text) { CharToOem(text, bufRus); return bufRus; } тоже не походит так, как нельзя при одном вызове cout использовать несколько операторов << с вызовом функции Rus cout << rus("йцу") << rus("фыв") << endl; результат йцуйцу.
C++ Поменять местами максимальный и последний элементы последовательности Дана последовательность а1…а30. поменять местами максимальный и последний элементы #include <stdio.h> #include <stdlib.h> int main() { FILE *xf; int i, x, n=30,max,t; xf = fopen("text.txt", "w"); printf("vvodim el-ti posledovatelnosti X..\n"); for (i=0; i<n; i++) подробнее

Показать сообщение отдельно
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 177

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

19.07.2013, 13:55. Просмотров 1220. Ответов 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 минуту
Киньте хотябы ссылку на статью с алгоритмом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru