Если надо добавить в конец строки другую строку, применяется метод 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 – длина заменяемой подстроки.
Алгоритм решения задачи:
- Ввести строку, подстроку, которую требуется заменить, и подстроку, которую требуется вставить на место прежней.
- Найти место вхождения подстроки в строку с помощью функции pos().
- Удалить старую подстроку с помощью процедуры delete().
- Вставить новую подстроку, используя процедуру 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 в конце еще дописывать ‘