Язык программирования C++ имеет класс строк, который используется для последовательности символов, также известной как строки. Это класс std::string.
Данный класс хранит строки в виде последовательности символьных байтов и предоставляет функции, которые позволяют нам получать доступ и управлять отдельными символами.
Строковые функции
Строка C++ представляет собой последовательность символов. Когда мы определяем строки в C++, мы используем ключевое слово string, которое представляет собой не что иное, как класс std::string. Этот строковый класс поддерживает различные функции чтения строки, манипулирования, доступа к строке и т. д., которые выполняют различные операции над строковыми объектами. Ниже перечислены некоторые часто используемые функции:
№ | Строковые функции | Описание |
1 | Getline | Получить строку из потока в строку |
2 | Substr | Получить подстроку заданной строки |
4 | Length, strlen | Получить длину строки |
5 | Find | Найти содержимое в строке |
6 | Strtok, substr with delimiter | Разделить строку на токены |
getline
Прототип функции: istream& getline(istream& is, string& str)
Параметр(ы): is => объект istream, из которого извлекаются символы.
str=> Строковый объект, который используется для хранения извлеченного символа.
Возвращаемое значение такое же, как у istream. Внутри выполнение getline устанавливает определенные внутренние флаги следующим образом.
Флаг | Описание ошибки |
eofbit | Достигнут конец исходного кода |
failbit | Ввод нельзя интерпретировать как допустимое текстовое представление объекта этого типа. |
badbit | Любая другая ошибка, кроме двух вышеуказанных |
Описание: getline — стандартная библиотечная функция. Эта функция используется для чтения строки из стандартного потока ввода, такого как istream. Строки считываются до тех пор, пока не встретится «\n», который считается символом-разделителем.
В качестве другой версии getline можно указать третий параметр «char delim». Это символ-разделитель, указанный явно. В этой функции строка текста будет считываться до тех пор, пока не встретится указанный символ-разделитель.
Ниже приведен простой пример, демонстрирующий использование getline:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <string> using namespace std; int main() { string mystr; cout<<"Enter the input string:"<<endl; getline(cin,mystr); cout<<"You entered: "<<mystr; } } |
Вывод данных:
Enter the input string: C++ tutorials You entered: C++ tutorials |
В приведенном выше примере мы читаем входную строку с помощью функции getline. Обратите внимание, что введенные строки или текст считываются в строковый объект mystr до тех пор, пока не встретится ‘\n’.
Substr
Прототип функции: string substr(size_t startpos, size_t endpos)
Параметр(ы): startpos=> Начальная позиция, из которой должна быть извлечена подстрока.
endpos=> Конечная позиция подстроки.
Возвращаемое значение: возвращает строку, являющуюся подстрокой родительской строки.
Описание: Эта функция возвращает подстроку заданной строки. Функция принимает в качестве параметров начальную и конечную позиции, а затем возвращает последовательность символов между этими позициями.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> #include <string> using namespace std; int main() { string mystr = "MonitorBank"; string mysub = mystr.substr(0,8); cout<<"Input string : "<<mystr<<endl; cout<<"Substring(0,8) : "<<mysub<<endl; } |
Вывод данных:
Input string : MonitorBank Substring(0,8) : Monitor |
Length
Длина строки (length) — это количество символов, присутствующих в строке. Объектное представление строк std::string в C++ использует функции length() для возврата длины строки.
Кроме того, также есть метод size, который возвращает размер строки. Мы использовали метод size в приведенном ниже примере для функции length(). Еще одна функция, возвращающая длину строки, — «strlen». Эта функция возвращает длину строки, обозначенной массивом символов.
Мы рассмотрим обе функции одну за другой на примерах.
length() :
Прототип функции: size_t length ()
Параметр(ы): вызывается строкой, длина которую необходимо узнать.
Возвращаемое значение: возвращает параметр типа size_t, который представляет собой длину строки.
Описание: Эта функция находит длину строкового объекта, которым она вызывается.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> #include <cstring> using namespace std; int main() { string mystr = "MonitorBank"; cout<<"Input string : "<<mystr<<endl; cout<<"The length of the string (with length method )is: "<<mystr.length()<<endl; cout<<"The size of the string (with size method )is: "<<mystr.size()<<endl; } |
Вывод данных:
Input string : MonitorBank The length of the string (with length method )is: 11 The size of the string (with size method )is: 11 |
В приведенной выше программе мы используем функции длины и размера std::string, которые возвращают длину и размер строкового объекта соответственно. Поскольку длина и размер возвращают количество символов в строке, мы получаем тот же результат.
strlen()
Прототип функции: size_t strlen (const char* str);
Параметр(ы): str=> Указатель на заканчивающуюся нулем строку, длину которой необходимо узнать.
Возвращаемое значение: возвращает значение size_t, обозначающее длину строки str.
Описание: функция strlen() возвращает длину строки, заканчивающейся нулем. Строка, принимаемая функцией strlen в качестве параметра, представляет собой массив символов, заканчивающийся нулем.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <cstring> #include <iostream> using namespace std; int main() { char mystr1[] = "This a our first string"; char mystr2[] = "This is our second string"; int len_mystr1 = strlen(mystr1); int len_mystr2 = strlen(mystr2); cout << "Length of mystr1 = " << len_mystr1 << endl; cout << "Length of mystr2 = " << len_mystr2 << endl; if (len_mystr1 > len_mystr2) cout << "mystr1 is longer than mystr2"; else if (len_mystr1 < len_mystr2) cout << "mystr2 is longer than mystr1"; else cout << "mystr1 and mystr2 are equal in length"; return 0; } |
Вывод данных:
Length of mystr1 = 23 Length of mystr2 = 25 mystr2 is longer than mystr1 |
В приведенной выше программе мы определили две разные строки и находим их индивидуальную длину с помощью функции strlen. Затем мы сравниваем длину двух строк и определяем, являются ли строки равными или неравными.
Find
Прототип функции: size_t find(string mysub)
Параметр(ы): mysub=> Строковый объект, который нужно найти внутри родительской строки.
Возвращаемое значение: size_t=> Первая позиция подстроки в родительской строке
Описание: Функция поиска строки используется для поиска позиции подстроки в родительской строке. Эта функция вызывается родительской строкой, и в качестве параметра передается подстрока, позиция которой должна быть найдена. Если подстрока отсутствует, возвращается пустая позиция.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <cstring> using namespace std; int main() { string mystr = "MonitorBankRu"; string mysub = "Bank"; size_t pos = mystr.find(mysub); if (pos != string::npos) cout << "First occurrence of string "<<mysub<<":" << pos << endl; mysub = "Ru"; pos = mystr.find(mysub); if (pos != string::npos) cout << "First occurrence of string "<<mysub<<":" << pos << endl; } |
Вывод данных:
First occurrence of string Bank:7 First occurrence of string Ru:9 |
Эта программа определяет строку как «MonitorBankRu». Используя функцию поиска, мы находим первое вхождение строки «Bank» в родительской строке. Далее находим вхождение строки «Ru». Результатом является позиция вхождения искомой строки.
Split String
Разделение строки с помощью разделителя или токена является полезной операцией. В C++, поскольку есть более одного представления строк, мы можем использовать разные подходы к разбиению строки. Здесь мы обсудим два подхода к разделению строки.
Разделение объекта std::string
Самый простой способ разделить строковый объект — использовать функцию substr для объекта и указать разделитель в качестве конечной позиции, чтобы мы получили подстроку. Таким образом, мы можем разделить строку по разделителю, пока не пройдем всю строку.
Давайте посмотрим на пример ниже, который сначала находит положение разделителя с помощью функции «find», затем находит подстроку и, наконец, выводит каждый из токенов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> #include <string> using namespace std; int main() { string mystr = "This_is_monitor_bank"; string delimiter = "_"; size_t pos = 0; string token; while ((pos = mystr.find(delimiter)) != std::string::npos) { token = mystr.substr(0, pos); cout << token << endl; mystr.erase(0, pos + delimiter.length()); } cout << mystr<< endl; } |
Вывод данных:
This is monitor bank |
Как показано в приведенной выше программе, мы указываем разделитель, который будет использоваться для разделения данной строки. В цикле мы неоднократно находим вхождение разделителя с помощью функции поиска, передаем его функции подстроки и извлекаем подстроку. Затем каждый из этих полученных токенов отображается как результат.
Разделение массива символов с помощью функции strtok
Другой способ токенизации строки (разделение строки с помощью разделителя) — использование функции «strtok». Ниже мы обсудим особенности функции strtok.
Прототип функции: char* strtok(char str [], const char *delim)
Параметр(ы): str[] => Разделяемая строка.
Разделитель => Разделитель, по которому должна быть разделена строка.
Возвращаемое значение: возвращает следующий токен после разделения родительской строки.
Описание: Функция strtok разбивает заданную строку на токены по заданным разделителям. Эту функцию нужно вызывать в цикле, чтобы мы получили все токены для данной строки. Когда токенов больше не осталось, функция возвращает null.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <cstring> #include <iostream> using namespace std; int main() { char mystr[] = "This_is_monitor_bank"; char *token = strtok(mystr, "_"); while (token != NULL) { cout<<token<<endl; token = strtok(NULL, "_"); } return 0; } |
Вывод данных:
This is monitor bank |
Обратите внимание, что в этой программе мы используем функцию strtok, которая принимает строку и разделитель в качестве аргументов. Затем он разбивает строку на токен на основе указанного разделителя и отображает отдельные токены.
Итог
В этой статье мы рассмотрели некоторые общие важные функции, используемые для строк C++.
Мы обсудили функции для чтения входной строки, поиска строки, подстроки родительской строки, длины строки, разделения строки и т. д., а также их варианты. Эти функции помогают эффективно читать строки и управлять ими.
В нашей следующей статье мы подробно рассмотрим функции преобразования строк C++, которые можно использовать для преобразования строки в int и double, а также int в строку и т. д.
С Уважением, МониторБанк