1.85M
Category: programmingprogramming

Строки в языке С++

1.

ОБРАБОТКА СТРОК В C++

2.

Строковый тип данных
• Строкой называется последовательность символов.
• Для работы со строками используется тип string. Для
использования этого типа его необходимо подключить
в код с помощью директивы #include <string>
• Количество символов в строке определяет ее длину.
• Номера позиций символов строки начинается с 0.

3.

Примеры описания строк
#include <iostream>
#include <string>
using namespace std;
int main()
{ string s1 = "Hello, ";
string s2 = "my friend!";
cout << s1 + s2 << endl;
return 0; }

4.

Чтение строк
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
cout << "Hello, " + s;
return 0;
}

5.

Коды символов
string s;
char c;
cin >> s;
c = s[0];
cout << c;
Когда мы выводим переменную типа char, то выводится символ.
Хотя на самом деле char – числовая переменная и обозначает
номер символа
в кодовой таблице.
По аналогии с переводом вещественных чисел в целые мы
можем сделать перевод
из типа char в тип int, чтобы узнать код символа.
Вывод кода символа выглядит так:cout << (int) c;

6.

Выделение символа
• string s;
• getline(cin, s);
• for (auto c : s) {
•}
• }
if (c >= '0' && c <= '9') {
cout << c;

7.

Обращение к символу в строке
• К отдельным символам строки можно обратиться по
номеру (индексу) данного символа в строке.
• Например, для обращения к пятому символу строки
s
следует записать s[4].
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{ string s = "Hello, my friends!";
cout << s[4] << endl;
return 0; }
План

8.

Присваивание значений
Значения строк можно присваивать друг другу.
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{ string s1 = "Hello, my friends!";
string s2; s2 = s1;
cout << s2 << endl;
return 0; }

9.

Поиск подстроки в строке
int n;
cin >> n;
string s;
getline(cin, s);
for (int i = 0; i < n; i++) {
getline(cin, s);
if (s.find("rkpt") != -1) {
for (auto c : s) {
if (c >= '0' && c <= '9') {
cout << c;
}
}
}
}

10.

Сравнение строк
• Строки можно сравнивать друг с другом с помощью
операций отношения (==, !=, <, >, <=, >=).
• При сравнении строки рассматриваются посимвольно
слева направо, при этом сравниваются коды
соответствующих пар символов.
• Оператор == возвращает true, если все символы обеих
строк равны. При этом символы должны совпадать в
том числе по регистру.
• Операция != возвращает true, если две строки не
совпадают.

11.

Сравнение строк
• Остальные базовые операции сравнения (<, <=, >, >=)
сравнивают строки в зависимости от кода символа.
• Например, строка "b" условно больше строки "a", так
как символ b по алфавиту идет после символа a. А
строка "a" больше строки "A".
• Если первые символы строки равны, то сравниваются
последующие символы.

12.

Сравнение строк
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
bool b1, b2, b3;
int main()
{b1 = "abc" == "abc"; cout << b1 << endl;
b2 = "one" < "ones"; cout << b2 << endl;
b3 = "abc" > "abbc"; cout << b3 << endl;
return 0; }

13.

Коррекция символов строки
• Можно осуществлять коррекцию любого символа
строковой переменной, для чего в соответствующем
операторе достаточно указать имя переменной типа
string, вслед за которым в квадратных скобках
задается номер корректируемого символа.
• Нумерация символов начинается с 0.

14.

Коррекция символов строки
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{ string s = "bet"; s[0] = 'p';
cout << s << endl;
return 0; }
План

15.

Функции
length
Возвращает текущее количество элементов
в строке.
max_size Возвращает максимальное количество
символов в строке.
clear
Удаляет все элементы строки.
append
Добавляет символы в конец строки.
assign
Назначает значения новых символов
содержимому строки.

16.

int main()
{ string str1("Hello world"); //11 символов
cout << "The current length of string str1 is: "
<< str1.length() << endl;
cout << "The max_size of string str1 is: "
<< str1.max_size() << endl << endl;
cout << "The new string is: "
<< str1.append("!") << endl;
cout << "The new string is: "
<< str1.assign("The mother cleans frame") << endl;
str1.clear();
cout << "The current length of string str1 is: "
<< str1.length() << endl;
return 0; }

17.

Функция insert
Вставляет подстроку в указанное положение в строке.
int main()
{ string str1("Hello world");
cout << "The new string str1 is: "
<< str1.insert(6, "my !", 3) << endl;
return 0; }
Где:
6 – позиция в строке, начиная с которой выполняется вставка
подстроки;
"my !" – вставляемая подстрока;
3 – количество символов подстроки, вставляемых в строку.

18.

Функция find
Ищет первую позицию вхождения подстроки в строку.
Если вхождение не найдено, возвращается значение
string::npos
int main()
{string str1("Hello world!");
cout << str1.find("world") << endl; /*возвращает первую
позицию вхождения подстроки */
cout << str1.find("o") << endl; /*возвращает первое
вхождение символа */
cout << str1.find("o",6) << endl; /*возвращает первое
вхождение символа, начиная с 6 позиции в строке*/
return 0;}

19.

Функция _Copy_s
Копирует не более указанного количества символов из
индексированного положения в исходной строке в массив
символов назначения (аргументы: массив, в который осуществляется
копирование; размер массива; количество копируемых символов; позиция
начала копирования).
int main()
{string str1("Hello World!");
char array1[20] = {0}; char array2[10] = {0};
str1._Copy_s(array1, 20, 11);
cout << "The copied characters array1 is: " << array1 << endl;
str1._Copy_s(array2, 10, 5, 6);
cout << "The copied characters array2 is: " << array2 << endl;
return 0; }

20.

Функция Erase
Удаляет символ или диапазон символов с указанного
положения в строке (аргументы: индекс первого удаляемого символа,
количество удаляемых символов).
int main()
{ string str1("The mother cleans frame.");
str1.erase(17, 6);
cout << str1 << endl;
return 0;
}

21.

Преобразование типов
http://www.cplusplus.com/reference/string/
int main()
{ string st = "123";
int a = stoi(st); //преобразование строки в целое число
cout << a << '\n';
int b = 278;
st = to_string(b); //преобразование числа в строку
cout << st << '\n';
return 0; }

22.

Пример 1
Необходимо найти количество гласных букв в строке
(учитывать и прописные, и строчные буквы).
int main()
{ string str1("Hello WOrld!");
string str2("AEOUIYaeouiy");
int count = 0;
for (int i = 0; i < str1.length(); i++)
if (str2.find(str1[i]) != string::npos) count++;
cout << count << endl;
return 0; }

23.

Пример 2
Необходимо выписать все гласные буквы из данной
строки, сохранив их последовательность (учитывать и
прописные, и строчные буквы).
int main()
{ string str1("Hello WOrld!"), str3;
string str2("BDGJNMRVZWCFHKLQPSTXbdgjnmrvzwcfhklqpstx");
for (int i = 0; i < str1.length(); i++)
if (str2.find(str1[i]) != string::npos)
str3 += str1[i];
cout << str3 << endl;
return 0; }

24.

Пример 3
Необходимо написать программу обработки
строки, выводящую через запятую все слова
строки.
int main()
{ string str1("The mother cleans frame."), str2(" ,.!?;:"), str3;
char *char_ar; int n_begin=0; //позиция начала слова
int n_end=0; //позиция конца слова
for (int i = 0; i < str1.length(); i++)
if (str2.find(str1[i]) != string::npos)
{n_end = i - 1;
char_ar = new char[n_end - n_begin + 2] {0};
str1._Copy_s(char_ar, n_end - n_begin + 2, n_end - n_begin + 1, n_begin);
str3 = str3 + char_ar + ","; delete[] char_ar; n_begin = i + 1; }
str3.erase(str3.length() - 1, 1); //удаление последней запятой
cout << str3 << endl;
return 0; }
План

25.

Спасибо за внимание!
Выход
English     Русский Rules