Заменить строку (String Replace) в C++

Очередь (queue) в C++ Программирование и разработка

C ++ String Replace занимается поиском определенной подстроки в целевой строке и последующей ее заменой. Строку можно создать двумя основными способами: с использованием указателя на постоянный символ (массив символов) или путем создания его экземпляра из строкового класса. Строковый класс имеет функцию-член replace (). Это делает поиск и замену. Поиск и замена выполняется с помощью экземпляров строковых объектов, а не строк, созданных с использованием указателя на постоянный символ.

Строковый объект — это структура данных, а его основной компонент — список. Каждая ячейка этого списка имеет символ. Полная последовательность символов образует буквальную строку. К каждой позиции символа можно получить доступ с помощью индекса или итератора. Подсчет индекса начинается с нуля. Итератор — это разработанный указатель.

Строковый класс C + имеет разные варианты функции-члена replace (). Такой набор функций называется перегруженными функциями. В этой статье объясняется, как использовать различные перегруженные строковые функции-члены replace ().

Следующая целевая строка будет использоваться для всех примеров:

    «Our planet has 24 hours a day.»

К элементу (символу) строкового объекта можно получить доступ либо по ссылке, либо с помощью итератора. На самом деле C ++ 20 имеет 14 перегруженных функций-членов replace () для строкового класса. В семи из этих функций доступ к элементам осуществляется по ссылке, а в остальных семи — с помощью итератора.

Функции с семью членами, элементы которых доступны по ссылке, будут объяснены в этой статье. Только один из оставшихся семи, для итераторов, будет объяснен. Зная тот, для которого итератор обращается к элементам, читатель может вывести объяснение для остальных шести.

Содержание
  1. basic_string& replace(size_type pos1, size_type n1, const T& t)
  2. basic_string& replace(size_type pos, size_type n1, const charT* s)
  3. basic_string& replace(size_type pos1, size_type n1, const basic_string& str)
  4. basic_string& replace(size_type pos, size_type n1, size_type n2, charT c)
  5. basic_string& replace(size_type pos, size_type n1, const charT* s, size_type n2)
  6. basic_string& replace(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos)
  7. basic_string& replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos)
  8. basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str)
  9. Заключение
Читайте также:  Очередь (queue) в C++: реализация и использование

basic_string& replace(size_type pos1, size_type n1, const T& t)

Эта функция-член переходит к индексу в позиции pos1, затем измеряет подстроку длины n1 (начиная с pos1) и заменяет ее другой независимой подстрокой массива символов. Подстрока должна быть заменена, и подстрока не должна быть одинаковой длины. Следующая программа иллюстрирует это:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);
char replacement[] = «solar home»;
string result = target.replace(46, replacement);
cout << result << endl;

return 0;
}

Результат:

    Our solar home has 24 hours a day.

Возвращенная строка является строковым объектом. Чтобы использовать функцию-член replace () строкового класса, в программу необходимо включить строковую библиотеку (с помощью директивы).

Примечание: весь строковый код для этой статьи находится в основной функции C ++.

basic_string& replace(size_type pos, size_type n1, const charT* s)

Эта функция-член почти такая же, как и приведенная выше. Он переходит к индексу в позиции pos, измеряет подстроку длины n1 (начиная с pos) и заменяет ее другой независимой подстрокой константного указателя на символы. Заменяемая подстрока и замещающая подстрока не обязательно должны быть одинаковой длины. Следующая программа иллюстрирует это:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);
const char* replacement = «solar home»;
string result = target.replace(46, replacement);
cout << result << endl;

return 0;
}

Результат:

    Our solar home has 24 hours a day.

basic_string& replace(size_type pos1, size_type n1, const basic_string& str)

Эта функция-член аналогична приведенной выше. Однако замещающая строка является строковым объектом, созданным из строкового класса. Следующая программа иллюстрирует это:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);
string replacement = string(«solar home»);
string result = target.replace(46, replacement);
cout << result << endl;

return 0;
}

Результат:

    Our solar home has 24 hours a day.

basic_string& replace(size_type pos, size_type n1, size_type n2, charT c)

Эта функция-член аналогична приведенной выше. Однако заменяющая строка — это тот же символ, повторенный n2 раза. Обратите внимание, что у этой функции есть четыре параметра. Следующая программа иллюстрирует его использование:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);

string result = target.replace(463‘e’);

cout << result << endl;

return 0;
}

Результат:

    Our eee has 24 hours a day.

«планета» была заменена тремя буквами «е» (земля).

basic_string& replace(size_type pos, size_type n1, const charT* s, size_type n2)

Эта функция-член аналогична приведенной выше. Однако строка замены — это постоянный указатель на символы, первые n2 символа которых используются для замены. Следующая программа иллюстрирует это:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);
const char* replacement = «earth world»;
string result = target.replace(46, replacement, 5);
cout << result << endl;

return 0;
}

Результат:

    Our earth has 24 hours a day.

basic_string& replace(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos)

Эта функция-член аналогична приведенной выше. Однако замещающая строка представляет собой массив символов, n2 символа которого используются для замены, начиная с позиции замещающей строки pos2, которая не обязательно равна нулю. Если четвертый аргумент этой функции отсутствует, то количество символов для замены будет от pos2 до конца массива-of-chars; в противном случае это будет n2 символа из pos2. Следующая программа иллюстрирует это:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);
char replacement[] = «the earth world»;
string result = target.replace(46, replacement, 45);
cout << result << endl;

return 0;
}

Результат:

    Our earth has 24 hours a day.

basic_string& replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos)

Эта функция-член аналогична приведенной выше. Однако замещающая строка является строковым объектом, созданным из строкового класса. Следующий код иллюстрирует это:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);
string replacement = string(«the earth world»);
string result = target.replace(46, replacement, 45);
cout << result << endl;

return 0;
}

Результат:

    Our earth has 24 hours a day.

basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str)

Эта функция-член переходит к элементу (символу) целевой строки, на который указывает итератор i1; Затем он рассматривает символы вплоть до того, на который итератор указал i2. Этот диапазон должен быть заменен всеми символами строкового объекта, созданного из класса. Следующая программа иллюстрирует это:

    #include <string>
#include <iostream>
using namespace std;

int main()
{
string target = string(«Our planet has 24 hours a day.»);
string replacement = string(«solar world»);
string::iterator it1 = target.begin();
it1 = it1 + 4;
string::iterator it2 = target.begin();
it2 = it2 + 10;
string result = target.replace(it1, it2, replacement);
cout << result << endl;

return 0;
}

Результат:

    Our solar world has 24 hours a day.

Последний элемент диапазона, на который указывает второй итератор, не участвовал в замене; это был просто верхний разделитель.

Были использованы два итератора, it1 и it2. Каждый был получен из функции-члена begin () строкового класса. Функция-член begin () возвращает итератор, который указывает на первый элемент строкового объекта. Чтобы он1 указывал на ’p’ слова «planet» в индексе 4 целевой строки, его нужно было увеличить на 4. Чтобы он2 указывал на ’’ сразу после слова «planet» в индексе 10 целевой строки, it2 имел увеличивается на 10.

Заключение

Это подстрока списка строкового объекта, созданного из строкового класса, который рассматривается для замены. Подстрока строки, объявленной как массив символов или константный указатель на символы, не рассматривается для замены. Заменяющая строка — это другая независимая строка. Весь строковый литерал заменяющей строки может выполнять замену, или его часть все еще может выполнять замену. Строковый класс C ++ 20 имеет для замены 14 перегруженных функций, 8 из которых были объяснены выше.

Оцените статью
bestprogrammer.ru
Добавить комментарий