Добавление строки в C++

Функция Vector Insert () в C++ Программирование и разработка

Слово «добавить» означает «добавить что-то позади другого». Строку можно объявить в C ++ двумя основными способами. Объявление строки как массива символов или константного указателя на символы — это один из способов. Другой способ — создать экземпляр структуры данных строкового объекта из строкового класса. Чтобы создать экземпляр строкового объекта из строкового класса, в программу должна быть включена строковая библиотека C ++.

Рассмотрим следующую целевую строку:

    «Dancing on the moon»

’!’ как символ, может быть добавлен к целевой строке, чтобы она стала,

    «Dancing on the moon!»

Подстрока «поверхность» может быть добавлена ​​к целевой строке, чтобы она стала,

    «Dancing on the moon’s surface»

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

basic_string& append(const T& t)

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

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

int main()
{
string target = string(«Dancing on the moon»);
char chs[] = «‘s surface»;
string result = target.append(chs);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

Примечание: добавляются как исходная, так и возвращенная строки.

basic_string& append(const charT* s)

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

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

int main()
{
string target = string(«Dancing on the moon»);
const char* cpc = «‘s surface»;
string result = target.append(cpc);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

basic_string& append(initializer_list<charT>)

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

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

int main()
{
string target = string(«Dancing on the moon»);
string result = target.append(«‘s surface»);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

Следующая программа иллюстрирует это для добавляемой строки в виде массива символов:

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

int main()
{
string target = string(«Dancing on the moon»);
string result = target.append({\’,‘s’,‘ ‘,‘s’,‘u’,‘r’,‘f’,‘a’,‘c’,‘e’,\0});
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

basic_string& append(const basic_string& str)

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

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

int main()
{
string target = string(«Dancing on the moon»);
string otherStr = string(«‘s surface»);
string::iterator it = otherStr.begin();
string result = target.append(otherStr);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

basic_string& append(InputIterator first, InputIterator last)

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

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

int main()
{
string target = string(«Dancing on the moon»);
string otherStr = string(«The earth’s surface is not smooth»);
string::iterator it = otherStr.begin();
string::iterator fst = it + 9;
string::iterator lst = it + 19;
string result = target.append(fst, lst);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

Обратите внимание, как были определены итераторы fst и lst.

basic_string& append(const charT* s, size_type n)

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

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

int main()
{
string target = string(«Dancing on the moon»);
const char* cpc = «‘s surface»;
string result = target.append(cpc, 7);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surf

basic_string& append(const T& t, size_type pos, size_type n = npos)

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

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

int main()
{
string target = string(«Dancing on the moon»);
const char* cpc = «‘s surface»;
string result = target.append(cpc, 25);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon surf

Если третий аргумент отсутствует, то символы берутся от pos до конца его строки.

basic_string& append(const basic_string& str, size_type pos, size_type n = npos)

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

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

int main()
{
string target = string(«Dancing on the moon»);
string otherStr = «‘s surface»;
string result = target.append(otherStr, 25);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon surf

Если третий аргумент отсутствует, то символы берутся от pos до конца его строки.

basic_string& append(size_type n, charT c)

Эта функция-член может добавлять n номеров одного и того же символа c. Следующая программа иллюстрирует это:

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

int main()
{
string target = string(«Dancing on the moon»);
char ch = ‘!’;
string result = target.append(3, ch);
cout << result << endl;

return 0;
}

Результат:

    Dancing on the moon!!!

void push_back(charT c)

Функция push_back () возвращает void. Добавляет только один символ c. Следующая программа иллюстрирует это:

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

int main()
{
string target = string(«Dancing on the moon»);
char ch = ‘!’;
target.push_back(ch);
cout << target << endl;

return 0;
}

Результат:

    Dancing on the moon!

Поскольку новая строка не возвращается, необходимо изменить исходную целевую строку.

Inserting

Строковый класс также имеет функцию-член insert (). Это тоже перегруженная функция разных вариантов. Одним из основных аргументов функции вставки является итератор. Если функция insert () ведет себя как функция append (), то ей нужен итератор, указывающий сразу после последнего символа строки. Все функции insert () изменяют исходную цель и не возвращают добавленную строку.

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

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

int main()
{
string target = string(«Dancing on the moon»);
string::iterator it = target.end();
target.insert(it, ‘!’);
cout << target << endl;

return 0;
}

Результат:

    Dancing on the moon!

Следующая программа показывает, как список инициализаторов добавляется к строке:

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

int main()
{
string target = string(«Dancing on the moon»);
string::iterator it = target.end();
target.insert(it, {\’,‘s’,‘ ‘,‘s’,‘u’,‘r’,‘f’,‘a’,‘c’,‘e’,\0});
cout << target << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

Вместо использования итератора функция insert () может использовать число, которое на единицу больше максимального индекса. Это число можно получить с помощью выражения stringObj.size (). Следующий код иллюстрирует это:

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

int main()
{
string target = string(«Dancing on the moon»);
string::iterator it = target.end();
const char* cpc = «‘s surface»;
target.insert(target.size(), cpc);
cout << target << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

Следующая программа похожа на приведенную выше, но другая строка является строковым объектом:

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

int main()
{
string target = string(«Dancing on the moon»);
string::iterator it = target.end();
string otherStr =  string(«‘s surface»);
target.insert(target.size(), otherStr);
cout << target << endl;

return 0;
}

Результат:

    Dancing on the moon‘s surface

Заключение

Чтобы добавить к целевой строке, используйте функцию-член append () строкового класса. В C ++ существует девять перегруженных вариантов функции-члена append (). Чтобы добавить только один символ, можно использовать функцию-член push_back (). Функция-член insert () также может использоваться для добавления. В этом случае необходимо получить доступ к позиции сразу после последнего символа строки.

Читайте также:  Как создать схемы JSON с помощью Pydantic?
Оцените статью
bestprogrammer.ru
Добавить комментарий