Строки
Строка в C++ представляет собой особый класс. Класс, в терминах программирования, это элемент, описывающий абстрактный тип данных. Это означает, что для строки определены особые функции - методы.
Чтобы пользоваться строками, необходимо подключить заголовочный файл
#include <string>
Объявление строк схоже с объявлением переменной.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
s = "Hello!";
cout << s << endl;
return 0;
}
Строка также представляет собой массив символов. Значит, чтобы получить конкретный символ, можно использовать следующее:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
s = "Hello!";
cout << s[2] << endl;
return 0;
}
Этот код выведет третий символ строки s.
Методы string
Для начала следует сказать, что для строки определены итераторы begin() и end(). Указывающие соответственно на первый и на последний символы.
- s.size() / s.lenght() Возвращает длину строки s. В следующем коде мы циклом идем по строке и выводим каждый символ.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.size(); i++)
{
cout << s[i];
}
return 0;
}
- s.append(s1) Данная функция добавляет строку s1 в конец строки s.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "a";
string s1 = "b";
s.append(s1); // идентично s += s1
cout << s << endl;
cout << s + s1 << endl;
return 0;
}
- s.erase() Данная функция имеет несколько перегрузок:
s.erase(pos,n) | удаляет n символов начиная с позиции pos |
s.erase(iterator) | iterator - это итератор, указывающий на символ. В результате применения функции этот символ будет удален |
s.erase(it begin, it end) | it begin, it end - итераторы, указывающие на начало и конец удаляемой последовательности |
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "abcdef";
s.erase(1,2); // adef
string str = "abcdef";
str.erase(str.begin()); // bcdef
string sp = "abcdef";
sp.erase(sp.begin() + 1, sp.end()); // a
}
В данном коде показаны преобразования строки, сделанные erase().
-
s.find(ch) Возвращает позицию, с которой ch входит в s. В свою очередь ch может быть отдельным символом или строкой. Если ch не найдено, возвращает string::npos.
-
s.substr(pos,n) Возвращает подстроку из n символов начиная с позиции pos.
-
Перевод строки в число и наоборот Когда возникает потребность перевести число в строку, может пригодиться функция stoi:
string s;
cin >> s;
int n = stoi(s);
cout << n;
Если же нам нужно перевести число в строку, воспульзуемся функцией to_string:
int n;
cin >> n;
string s = to_string(n);
cout << s;
Символьные функции
Иногда нам нужно отвечать на вопрос: а является ли символ буквой, цифрой, знаком пунктуации etc? Тогда нам могут помочь символьные функции. Они принимают на вход символ и возвращают логическое значение.
isalpha(char) | true, если буква |
ispunct(char) | true, если знак пунктуации |
isdigit(char) | true, если десятичная цифра |
isspace(char) | true, если пробел |
islower(char) | true, если символ нижнего регистра |
isupper(char) | true, если символ вернего регистра |
tolower(char) | возвращает char в нижнем регистре |
toupper(char) | возвращает char в верхнем регистре |
Решение задачи : проверка на палиндромность
Создадим логическую функцию, с помощью которой будем определять, является ли строка палиндромом. Напомним, что палиндром - строка, которая читается одинаково с начала и с конца. Например, abba - палиндром.
bool palindrome(string s)
{
for (int i = 0; i < s.size() / 2; i++)
if (s[i] != s[s.size() - 1 - i])
return false;
return true;
}