Как написать программу для замены символов

Если надо добавить в конец строки другую строку, применяется метод append() , в который передается добавляемая строка:

#include #include int main() < std::string message< «hello»>; message.append(» «); // добавляем пробел message.append(«world»); // можно добавить по цепочке // message.append(» «).append(«world»); std::cout

Вставка строки

Для вставки одной строки в другую применяется функция insert() . Она имеет несколько различных версий. Самая простая версия принимет индекс вставки и вставляемую строку:

#include #include int main() < std::string text ; std::string str ; text.insert(7, str); std::cout

В данном случае в строку text начиная с 7-го индекса вставляем строку str. В итоге переменная text будет равна «insert a string into a text».

Также можно вставлять строковый литерал:

std::string text ; text.insert(6, «C/»); // Hello C/C++

Можно вставлять часть подстроки:

Уроки Python / Как найти символ в строке


std::string text ; std::string langs ; text.insert(6, langs, 5, 3); // Langs: C, C++

Здесь в text вставляем из переменной langs 3 символа с 5-го индекса, то есть подстроку » C,».

Среди других версий функции insert() также следует отметить версию, которая позволяет вставить определенный символ определенное число раз:

std::string text ; text.insert(8, 5, ‘*’); // Number: *****5678

В данном случае вставляем в строку text символ * 5 раз начиная с 8 индекса.

Замена подстроки

Для замены в строке некоторой части применяется функция replace() . Эта функция также имеет много версий, поэтому рассмотрим самые распространенные.

Самая простая версия принимает три параметра:

std::string std::string text ; text.replace(6, 4, «C++»); // Lang: C++ std::cout

Здесь в строке text заменяем 4 символа с 6-го индекса на строку «C++». Таким образом, из строки «Lang: Java» мы получим строку «Lang: C++».

В предыдущем примере символы заменялись на строковый литерал. Но также можно заменять на объект string:

std::string text ; std::string lang <«C++»>; text.replace(6, 4, lang); // Lang: C++

Нередко стоит задача заменить какой-то определенную подстроку, индекс которой может быть не известен. В этом случае мы можем воспользоваться поиском в строке, чтобы найти индекс подстроки и ее размер. Например, возьмем текст «Hello, Tom!» и заменим подстроку «Tom» на «Bob»:

Читайте также:
Программы для первого класса отзывы

#include #include int main() < std::string text ; const std::string separators ; // разделители слова size_t start ; // находим позицию подстроки size_t end ; // Находим конец подстроки if(end == std::string::npos) // если разделители слова не найдены < end = text.length(); >text.replace(start, end — start, «Alice»); // заменяем подстроку std::cout

Здесь находим позицию первого символа подстроки «Tom» в тексте и сохраняем ее в переменную start. Символ, следующий за последним символом подстроки «Tom», находится путем поиска символа разделителя из строки separators с помощью функции find_first_of() . Далее используем найденные позиции индекса в replace() .

Как заменить символ в строке Python

Однако в тексте может быть множество вхождений определенной подстроки (в нашем случае строки «Tom»), и может встать задача заменить все эти вхождения. Для этого мы можем использовать циклы:

#include #include int main() < std::string text ; std::string old_str; // какую подстроку заменить std::string new_str; // на какую строку заменить size_t start ; // находим позицию подстроки while (start != std::string::npos) // находим и заменяем все вхождения строки old_str < text.replace(start, old_str.length(), new_str); // Замена old_str на new_str start = text.find(old_str, start + new_str.length()); >std::cout

Здесь сначала находим индекс первого вхождения подстроки, которую надо заменить, и сохраняем этот индекс в переменную start. В цикле заменяем последовательно все вхождения подстроки. После каждой замены находим индекс следующего вхождения, сохраняем его в переменную start и повторяем цикл. Когда больше нет вхождений подстроки в текст, start будет содержать значение std::string::npos , что завершает цикл.

Из других версий функции replace() можно выделить функцию, которая заменяет подстроку определенным символом, который повторяется определенное количество раз:

std::string text ; text.replace(9, 6, 5, ‘*’); // Phone: +1*****8901

Здесь заменяет в строке text 6 символов начиная с 9-го индекса на 5 символов *.

Удаление символов

Если надо не просто заменить символы, а удалить их из текста, также можно использовать функцию replace() — в этом случае удаляемые символы фактически заменяются на пустую строку:

Читайте также:
Программа чтобы рисовать татуировки

#include #include int main() < std::string text ; const std::string empty; text.replace(5, 4, empty); // Замена «Tom» на пустую строку std::cout

Однако С++ также предоставляет для удаления символов специальную функцию — erase() . В качестве параметров она принимает начальный индекс удаления и количество удаляемых символов:

#include #include int main() < std::string text ; text.erase(5, 4); // удаляем 4 символа с 5-го индекса std::cout

Аналогично можно удалить все вхождения определенной подстроки:

#include #include int main() < std::string text ; std::string to_delete; // какую подстроку удалить size_t start ; // находим позицию подстроки while (start != std::string::npos) // находим и удаляем все вхождения to_delete < text.erase(start, to_delete.length()); start = text.find(to_delete, start + to_delete.length()); >std::cout

Функция erase() имеет ряд дополнительных версий. Так, можно оставить определенное количество символов с начала строки, а остальные удалить:

std::string text ; text.erase(5); // удаляем все кроме первых 5 символов — остается «Hello»

Если в функцию не передается никаких параметров, то она удаляет все символы, и в результате получаем пустую строку:

std::string text ; text.erase(); // пустая строка

Стоит отметить, что в стандарт С++20 была добавлена функция std::erase() , которая удаляет все вхождения определенного символа в строке:

#include #include int main() < std::string text ; std::erase(text, ‘T’); // Удаляем символ T std::cout

В данном случае удаляем из строки text символ T.

Источник: metanit.com

Замена подстроки в строке

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

  • s , s_old , s_new — исходная строка, заменяемая подстрока, вставляемая подстрока;
  • i – номер символа строки, с которого начинается подстрока;
  • l_old – длина заменяемой подстроки.

Алгоритм решения задачи:

  1. Ввести строку, подстроку, которую требуется заменить, и подстроку, которую требуется вставить на место прежней.
  2. Найти место вхождения подстроки в строку с помощью функции pos().
  3. Удалить старую подстроку с помощью процедуры delete().
  4. Вставить новую подстроку, используя процедуру insert().

Программа на языке Паскаль:

var s,s_old,s_new: string; i,l_old: byte; begin write(‘Insert string: ‘); readln(s); write(‘What change? ‘); readln(s_old); l_old := length(s_old); write(‘What to replace? ‘); readln(s_new); i := pos(s_old,s); delete(s,i,l_old); insert(s_new,s,i); writeln(s); end.

Функция pos(subs, s) ищет вхождение подстроки subs в строке s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s .

Читайте также:
Блок схемой программы является алгоритм представленный

Процедура delete(s, start, len) удаляет из строки s , начиная с позиции start , подстроку длиной len .

Процедура insert(subs, s, start) вставляет в строку s подстроку subs , начиная с позиции start .

Если в строке несколько одинаковых подстрок, которые требуется заменить на новую подстроку, то следует воспользоваться циклом:

var s, s_old, s_new: string; i, l_old: byte; begin write(‘Введите строку: ‘); readln(s); write(‘Введите подстроку, которую требуется заменить: ‘); readln(s_old); l_old := length(s_old); write(‘Введите новую подстроку: ‘); readln(s_new); i := 1; while i <> 0 do begin i := pos(s_old, s); if i <> 0 then begin delete(s, i, l_old); insert(s_new, s, i); end; end; writeln(s); end.

Пример работы программы:

Введите строку: wsfgw sfkjsfii sf . Введите подстроку, которую требуется заменить: sf Введите новую подстроку: 0000 w0000gw 0000kj0000ii 0000 .

Пример решения похожей задачи в сообществе VK: Заменить в тексте сочетания букв «abc» на «klm»

Источник: pas1.ru

Замена в строке одного символа на другой, как сделать на Си?

Не знаю, где ты взял этот код, но явно не там, где надо. В нём практически всё неправильно делается. Как будто взято из другого языка.

Решения вопроса 1

Основная проблема в том, что ваши массивы под строки символов замены размером в 1 чар. А писаться будет как минимум 2: введённый символ и символ конца строки.

Ответ написан более трёх лет назад
Спасибо большое, все работает=)
Ответы на вопрос 1
Developer, ex-admin

Хорошо бы в editString в конце еще дописывать ‘’. В таком виде как сейчас работает, пока массивы в стеке, стоит их начать выделять динамически и это у вас всплывет.
И заменить «new» на другое имя, т.к. new является служебным словом в С++, а от Си до С++ один шаг фактически 🙂

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

cpp

  • C++

Где можно почитать/посмотреть о написании dll на c++?

  • 1 подписчик
  • 57 минут назад
  • 12 просмотров

программирование

  • Программирование

Какие есть подходы к реализации подключения различных модулей для приложения?

  • 1 подписчик
  • 2 часа назад
  • 36 просмотров

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru