Similar presentations:
Строки в языке С++
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.
Спасибо за внимание!Выход