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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
corpdelta
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 15
#1

Замена в строке цепочки символов - C++

29.03.2014, 20:35. Просмотров 345. Ответов 3
Метки нет (Все метки)

Как осуществить замену строки. Помогите закончить программу или дайте пример схожей задачки
строка s = hodgapo hodrono
строка t = hod
строка r = lo
вывод = logapo lorono
цепочка символов hod в с строке s заменяется на цепочку символов lo
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    char *s = "hodgapohodrono";
    char *t = "hod";
    char *r = "lo";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 20:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замена в строке цепочки символов (C++):

Замена символов в строке - C++
Всем здрасте! Вот тут есть задача: Дается 3 строки. Надо найти 2-ю строку в 1-ой и заменить ее на 3-ю. Мое решение не проходит по...

Замена символов в строке с while - C++
Здравствуйте. Подскажите,пожалуйста,по задаче: Используйте серийный оператор for для замены всех символов строки на X. Как эти символы...

Замена символов в строке - C++
Каким образом выполнять замену в строке. Очень много читал но ничего не понял. Есть какой нибудь простой пример?

Замена символов в строке - C++
Доброго времени суток. Есть такой код. char text=&quot;hello world&quot;; Как заменить слово &quot;world&quot; в этой строке на слово &quot;Mike&quot;. Искал в...

Замена символов в строке - C++
Помогите решить задачу. Дана строка. Нужно заменить символ &quot;s&quot; на &quot;svb&quot;.

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

3
Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
29.03.2014, 21:31 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Интересно то, что вы сначала инклудите <string>, а потом прибегаете к использованию символьного указателя. В общем, даю вам код, думаю, все понятно. Если что-то не то - пишите.
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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s, t, r;
    cout << "Enter string s: "; getline(cin, s);
    cout << "Enter string t: "; getline(cin, t);
    cout << "Enter string r: "; getline(cin, r);
 
    cout << "\n" << "Source string: " << s;
    for(int i = 0; i < s.length(); i++) {
        if(s[i] == t[0]) {
            for(int j = 0, p = i; j < t.length(); j++, p++) {
                if(s[p] != t[j]) break;
                if((j == t.length() - 1) && (s[p] == t[j])) {
                    s.replace(i, p - i + 1, r);
                }
 
            }
        }
    }
 
    cout << "\n" << "New string: " << s;
    return 0;
}
2
corpdelta
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 15
29.03.2014, 23:40  [ТС] #3
Спасибо большое. Все работает. Не могли бы немножко объяснить что происходит в строках 14-19. Простите за навязчивость, просто занимаюсь изучение програмирования не так давно.
0
Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
30.03.2014, 10:56 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Нет проблем. В строке 14 мы входим в цикл, в котором будем пробегать каждый символ строки s. В строке 15 мы проверяем, одинаков ли символ с индексом s[i] с первым символом строки t (той строки, которую потом будем менять). То есть, в этой строчке начинается вся замена с нахождения той подстроки t в самой строке s.
В строке 16 мы входим в новый цикл, который имеет параметры: j и p. Параметр j нужен для сравнения символов подстроки t (поэтому он и имеет начальноке значение - нуль). Параметр p при объявлении равен i (это сделано для того, чтобы сравнивать ПОСЛЕДУЮЩИЕ символы строки. К примеру:
aaabcbaaa - s
bcb - t
Мы заходим в цикл на строке 14, теперь мы на строке 15. Проверяем, i = 3, s[i] = 'b', а t[0] = 'b'. Все верно, идем в строку 16, заходим в цикл. Строка 17 проверяет каждый последующий символ подстроки t с последующим символом строки s , но проверяет как? Дословно строка звучит так:
ЕСЛИ символ строки s с индексом p НЕ РАВЕН символу строки t с индексом j, ТОГДА выходим из цикла. (Все верно, нам и нужно проверить всю строку, а как нам ее еще проверить?)
Строка 18. Эта строка звучит так:
ЕСЛИ параметр j равен индексу последнего символа в подстроке t И ЕСЛИ последний проверяемый символ строки s равен последнему символу подстроки t (первое условие нам нужно для того, чтобы удостовериться в том, что цикл проверил уже все символы строки, кроме последнего), ТОГДА делаем замену этой подстроки t в строке s на подстроку r. Функция replace относится к заголовку <string>, поэтому работает со строками. Параметры могут быть разные, но один из вариантов, который использовал я:
1 - с какого символа заменять (к примеру, в строке aaabcbaaa мы заменяем с символа 3 (b))
2 - сколько символов заменяем (p - i + 1) - это разница между последним символом и первым символом подстроки в строке s.
3 - на какую подстроку надо менять те символы, которые мы указали во 2-ом параметре.
Вот и все, если что-то непонятно объяснил, пишите в личку, помогу, рассказав детальней. Для понимания этого алгоритма вам достаточно понять, что делает второй цикл. Вы просто мысленно пройдитесь по строкам 14-19, на листе бумаги имея строки s, t, r. На каждом этапе смотрите, что делает алгоритм и какие символы затрагиваются. Мне так часто помогает понять чужой код.
2
30.03.2014, 10:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 10:56
Привет! Вот еще темы с ответами:

Замена символов в строке - C++
Как заменить первый символ в строке &quot;k&quot; на &quot;c&quot; ? И последний &quot;с&quot; на &quot;k&quot; ? Вообще ума не приложу, помогите...

Замена в строке символов - C++
&quot;Заменить в строке все вхождения 'abc' на 'xy', а 'mm' на '1234'&quot;. Буду благодарна за оказанную помощь. проблема в том,что я не знаю как...

Замена символов в строке - C++
Здраствуйте! У меня такая задачка: Дано натуральное число n и символы s1,s2..sn.заменить каждую точку многоточием. Заранее благодарен! ...

Замена символов в строке - C++
Надо написать программу, которая будет считывать строку, и заменять определенный символ(пользователь сам указывает, какой именно) на другой...


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

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

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