Основы строк в C++

C++C++Intermediate
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе вы изучите строки в C++. Вы узнаете, как определить и инициализировать строки, а также как использовать функции строк.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня средний с процентом завершения 65%. Он получил 100% положительных отзывов от учащихся.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/StandardLibraryGroup(["Standard Library"]) cpp/BasicsGroup -.-> cpp/data_types("Data Types") cpp/BasicsGroup -.-> cpp/arrays("Arrays") cpp/BasicsGroup -.-> cpp/strings("Strings") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/IOandFileHandlingGroup -.-> cpp/user_input("User Input") cpp/StandardLibraryGroup -.-> cpp/string_manipulation("String Manipulation") cpp/StandardLibraryGroup -.-> cpp/standard_containers("Standard Containers") subgraph Lab Skills cpp/data_types -.-> lab-178539{{"Основы строк в C++"}} cpp/arrays -.-> lab-178539{{"Основы строк в C++"}} cpp/strings -.-> lab-178539{{"Основы строк в C++"}} cpp/output -.-> lab-178539{{"Основы строк в C++"}} cpp/user_input -.-> lab-178539{{"Основы строк в C++"}} cpp/string_manipulation -.-> lab-178539{{"Основы строк в C++"}} cpp/standard_containers -.-> lab-178539{{"Основы строк в C++"}} end

Аннотация содержания

C++ поддерживает два типа строк:

  1. Строка представляет собой массив char, завершающийся нулевым символом '\0' (шестнадцатеричное 0). Она также называется символьной строкой или C-строкой.
  2. Новый класс string, введенный в C++98.

Рекомендуется использовать "высокоуровневый" класс string, так как он гораздо проще в использовании и понимании. Однако многие старые программы использовали C-строки; многие программисты также используют "низкоуровневые" C-строки для полного контроля и повышения эффективности; кроме того, в некоторых случаях, таких как аргументы командной строки, поддерживаются только C-строки. Следовательно, вам может потребоваться понять оба типа строк.

  • Объявление и инициализация строк
  • Ввод/вывод строк
  • Операции со строками

Объявление и инициализация строк

Для использования класса string включите заголовочный файл <string> и "using namespace std".

Вы можете объявить и инициализировать строку с помощью строкового литерала, инициализировать ее пустой строкой или инициализировать с помощью другого объекта строки. Например:

#include <string>
using namespace std;

string str1("Hello");  // Инициализация с помощью строкового литерала (неявная инициализация)
string str2 = "world"; // Инициализация с помощью строкового литерала (явная инициализация с использованием оператора присваивания)
string str3;           // Инициализация пустой строкой
string str4(str1);     // Инициализация путем копирования из существующего объекта строки

Ввод/вывод строк

Пример

/* Testing string class input and output */
#include <iostream>
#include <string>     // Need this header to use string class
#include <limits>
using namespace std;  // Also needed for <string>

int main() {
   string message("Hello");
   cout << message << endl;

   // Input a word (delimited by space) into a string
   cout << "Enter a message (no space): ";
   cin >> message;
   cout << message << endl;

   cin.ignore(numeric_limits<streamsize>::max(), '\n');
   // flush cin up to newline (need <limits> header)

   // Input a line into a string
   cout << "Enter a message (with spaces): ";
   getline(cin, message);  // Read input from cin into message
   cout << message << endl;
   return 0;
}

Вывод:

Hello
Enter a message (no space): hello
hello
Enter a message (with spaces): hello world
hello world
image desc

ПРИМЕЧАНИЯ:

  • Мы должны "#include <string>", чтобы использовать класс string, и "using namespace std", так как string определен в пространстве имен std.
  • "cin >> aStr" считывает слово (разделенное пробелом) из cin (клавиатуры) и присваивает его переменной string aStr.
  • getline(cin, aStr) считывает целую строку (до '\n') из cin и присваивает ее aStr. Символ '\n' отбрасывается.
  • Чтобы очистить cin, можно использовать функцию ignore(numeric_limits<streamsize>::max(), '\n'), чтобы отбросить все символы до '\n'. numeric_limits находится в заголовочном файле <limits>.

Операции со строками

  • Проверка длины строки:

    string str("Hello, world");
    // обе они возвращают длину строки
    cout << str.length() << endl;  // 12
    cout << str.size()   << endl;  // 12
  • Проверка на пустую строку:

    string str1("Hello, world");
    string str2;                   // Пустая строка
    // Проверить, является ли строка пустой.
    cout << str1.empty() << endl;  // 0 (false)
    cout << str2.empty() << endl;  // 1 (true)
  • Копирование из другой строки: Просто используйте оператор присваивания "=".

    string str1("Hello, world"), str2;
    str2 = str1;
    cout << str2 << endl;   // Hello, world
  • Конкатенация с другой строкой: Используйте оператор плюс "+", или комбинированный плюс "+=".

    string str1("Hello,");
    string str2(" world");
    cout << str1 + str2 << endl;  // "Hello, world"
    cout << str1 << endl;         // "Hello,"
    cout << str2 << endl;         // " world"
    str1 += str2;
    cout << str1 << endl;  // "Hello, world"
    cout << str2 << endl;  // " world"
    string str3 = str1 + str2;
    cout << str3 << endl;  // "Hello, world world"
    str3 += "again";
    cout << str3 << endl;  // "Hello, world worldagain"
  • Чтение/запись отдельных символов строки:

    string str("Hello, world");
    // Возвращает символ по индексу, индекс начинается с 0. Выполняет проверку границ индекса.
    cout << str.at(0) << endl;  // 'H'
    cout << str[1] << endl;     // 'e'
    cout << str.at(str.length() - 1) << endl;  // 'd'
    
    str.at(1) = 'a';  // Записать в индекс 1
    cout << str << endl;  // "Hallo, world"
    
    str[0] = 'h';
    cout << str << endl;  // "hallo, world"
  • Извлечение подстроки:

    string str("Hello, world");
    // Возвращает подстроку, начиная с beginIndex, длиной size
    cout << str.substr(2, 6) << endl;  // "llo, w"
  • Сравнение с другой строкой:

    string str1("Hello"), str2("Hallo"), str3("hello"), str4("Hello");
    cout << str1.compare(str2) << endl;   // 1   'e' > 'a'
    cout << str1.compare(str3) << endl;   // -1  'h' < 'H'
    cout << str1.compare(str4) << endl;   // 0
    
    // Также можно использовать операторы == или!=
    if (str1 == str2) cout << "Same" << endl;
    if (str3!= str4) cout << "Different" << endl;
    cout << boolalpha;  // выводить bool как true/false
    cout << (str1!= str2) << endl;
    cout << (str1 == str4) << endl;
  • Поиск/замена символов: Вы можете использовать функции, доступные в #include <algorithm>

    Например,

    #include <algorithm>
    ......
    string str("Hello, world");
    replace(str.begin(), str.end(), 'l', '_');
    cout << str << endl;    // He__o, wor_d

Пример

/* Example on C++ string function */
#include <iostream>
#include <string>    // использовать класс string
using namespace std;

int main() {
   string msg = "hello, world!";
   cout << msg << endl;
   cout << msg.length() << endl;  // длина строки
   cout << msg.at(1) << endl;     // символ по индексу 1
   cout << msg[1] << endl;        // то же, что и выше
   cout << msg.empty() << endl;   // проверка на пустую строку
   cout << msg.substr(3, 3) << endl; // подстрока начинается
                                     // с позиции 3 длиной 3
   cout << msg.replace(3, 3, "why") << endl; // заменить подстроку
   cout << msg.append("end") << endl;        // добавить в конец
   cout << msg + "end" << endl;              // то же, что и выше
   cout << msg.insert(3, "insert") << endl;  // вставить после позиции 3

   string msg1;
   msg1 = msg;   // копировать
   cout << msg1 << endl;

   cout << "Enter a line: ";
   getline(cin, msg);   // прочитать строку ввода
   cout << msg << endl;
}

Вывод:

hello, world!
13
e
e
0
lo,
helwhy world!
helwhy world!end
helwhy world!endend
helinsertwhy world!end
helinsertwhy world!end
Enter a line: a
a
image desc

Обзор

Строка - это еще один важный тип данных, помимо чисел. В этом разделе мы поговорили о использовании строк. C++ предоставляет многие полезные методы для работы со строками, научитесь ими пользоваться с легкостью.

OSZAR »