Введение
В этом лабе вы изучите строки в C++. Вы узнаете, как определить и инициализировать строки, а также как использовать функции строк.
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
В этом лабе вы изучите строки в C++. Вы узнаете, как определить и инициализировать строки, а также как использовать функции строк.
C++ поддерживает два типа строк:
char
, завершающийся нулевым символом '\0'
(шестнадцатеричное 0
). Она также называется символьной строкой или C-строкой.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
ПРИМЕЧАНИЯ:
#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
Строка - это еще один важный тип данных, помимо чисел. В этом разделе мы поговорили о использовании строк. C++ предоставляет многие полезные методы для работы со строками, научитесь ими пользоваться с легкостью.