Строка в 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;
}