Введение
В этом лабе вы изучите строки в 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(клавиатуры) и присваивает его переменнойstringaStr. 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++ предоставляет многие полезные методы для работы со строками, научитесь ими пользоваться с легкостью.



