Рубрики

C ++ строковый класс и его приложения

В C ++ мы можем хранить строки одним из двух способов —

  1. Струны в стиле C
  2. класс строки (обсуждается в этом посте)

В этом посте обсуждается второй метод. Строковый класс является частью библиотеки C ++, которая поддерживает множество функций над строками в стиле C.
Строковый класс C ++ внутренне использует массив char для хранения символов, но все управление памятью, выделение и нулевое завершение обрабатываются самим строковым классом, поэтому его легко использовать. Длина строки C ++ может быть изменена во время выполнения из-за динамического распределения памяти, подобного векторам. Поскольку строковый класс является контейнерным классом, мы можем выполнять итерацию по всем его символам, используя итератор, аналогичный другим контейнерам, таким как vector, set и map, но обычно мы используем простой цикл for для итерации по символам и индексирования их с помощью оператора [] ,
Строковый класс C ++ имеет множество функций для удобной обработки строки. Самые полезные из них продемонстрированы в следующем коде.

// C ++ программа для демонстрации различных классов функций
#include <bits/stdc++.h>

using namespace std;

  

int main()

{

    // различный конструктор строкового класса

  

    // инициализация необработанной строкой

    string str1("first string");

  

    // инициализация другой строкой

    string str2(str1);

  

    // инициализация символом с номером вхождения

    string str3(5, '#');

  

    // инициализация частью другой строки

    string str4(str1, 6, 6); // из 6-го индекса (второй параметр)

                             // 6 символов (третий параметр)

  

    // инициализация частью другой строки: версия iteartor

    string str5(str2.begin(), str2.begin() + 5);

  

    cout << str1 << endl;

    cout << str2 << endl;

    cout << str3 << endl;

    cout << str4 << endl;

    cout << str5 << endl;

  

    // оператор присваивания

    string str6 = str4;

  

    // функция очистки удаляет все символы из строки

    str4.clear();

  

    // size () и length () возвращают длину строки и

    // они работают как синонимы

    int len = str6.length(); // То же, что "len = str6.size ();"

  

    cout << "Length of string is : " << len << endl;

  

    // к конкретному символу можно получить доступ через /

    // [] оператор

    char ch = str6.at(2); // То же, что и "ch = str6 [2];"

  

  

    cout << "third character of string is : " << ch << endl;

  

    // передний возвращает первый символ, а задний возвращает последний символ

    // строки

  

    char ch_f = str6.front();  // То же, что "ch_f = str6 [0];"

    char ch_b = str6.back();   // То же, что и ниже

                               // "ch_b = str6 [str6.length () - 1];"

  

    cout << "First char is : " << ch_f << ", Last char is : "

         << ch_b << endl;

  

    // c_str возвращает версию строки в массиве символов с нулевым символом в конце

    const char* charstr = str6.c_str();

    printf("%s\n", charstr);

  

    // добавляем добавляем строку аргумента в конце

    str6.append(" extension");

    // так же, как str6 + = "extension"

  

    // другая версия append, которая добавляет часть другого

    // строка

    str4.append(str6, 0, 6);  // на 0 позиции 6 символов

  

    cout << str6 << endl;

    cout << str4 << endl;

  

    // find возвращает индекс, где шаблон найден.

    // если шаблона нет, он возвращает предопределенный

    // константа npos, значение которой равно -1

  

    if (str6.find(str4) != string::npos)

        cout << "str4 found in str6 at " << str6.find(str4)

             << " pos" << endl;

    else

        cout << "str4 not found in str6" << endl;

  

    // функция substr (a, b) возвращает подстроку длины b

    // начиная с индекса а

    cout << str6.substr(7, 3) << endl;

  

    // если второй аргумент не передан, строка до конца

    // берется в качестве подстроки

    cout << str6.substr(7) << endl;

  

    // erase (a, b) удаляет b символов в индексе a

    str6.erase(7, 4);

    cout << str6 << endl;

  

    // итераторная версия стирания

    str6.erase(str6.begin() + 5, str6.end() - 3);

    cout << str6 << endl;

  

    str6 = "This is a examples";

  

    // replace (a, b, str) заменяет b символов из индекса на str

    str6.replace(2, 7, "ese are test");

  

    cout << str6 << endl;

  

    return 0;

}

Выход :

first string
first string
#####
string
first
Length of string is : 6
third character of string is : r
First char is : s, Last char is : g
string
string extension
string
str4 found in str6 at 0 pos
ext
extension
string nsion
strinion
These are test examples

Как видно из приведенного выше кода, мы можем получить длину строки по размеру (), а также по длине (), но длина () предпочтительнее для строк. Мы можем объединить строку в другую строку с помощью + = или append (), но + = немного медленнее, чем append (), потому что каждый раз, когда + вызывается, создается новая строка (создание нового буфера), которая возвращается битовые издержки в случае многих операций добавления.

Приложения :
На основе вышеуказанной строковой функции ниже написано несколько приложений:

// C ++ программа для демонстрации использования некоторой строковой функции
#include <bits/stdc++.h>

using namespace std;

  
// эта функция возвращает часть числа с плавающей запятой
string returnFloatingPart(string str)
{

    int pos = str.find(".");

    if (pos == string::npos)

        return "";

    else

        return str.substr(pos + 1);

}

  
// Эта функция проверяет, содержит ли строка всю цифру или нет

bool containsOnlyDigit(string str)

{

    int l = str.length();

    for (int i = 0; i < l; i++)

    {

        if (str.at(i) < '0' || str.at(i) > '9')

            return false;

    }

    // если мы дойдем до здесь, все символы будут цифрами

    return true;

}

  
// эта функция заменяет весь один пробел на% 20
// Используется в URL
string replaceBlankWith20(string str)
{

    string replaceby = "%20";

    int n = 0;

  

    // цикл до замены всего пространства

    while ((n = str.find(" ", n)) != string::npos )

    {

        str.replace(n, 1, replaceby);

        n += replaceby.length();

    }

    return str;

}

  
// функция драйвера для проверки вышеуказанных методов

int main()

{

    string fnum = "23.342";

    cout << "Floating part is : " << returnFloatingPart(fnum) 

         << endl;

  

    string num = "3452";

    if (containsOnlyDigit(num))

        cout << "string contains only digit" << endl;

  

    string urlex = "google com in";

    cout << replaceBlankWith20(urlex) << endl;

  

    return 0;      

}

Выход :

Floating part is : 342
string contains only digit
google%20com%20in

Статьи по теме :

Эта статья предоставлена Уткаршем Триведи. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

C ++ строковый класс и его приложения

0.00 (0%) 0 votes