Первый слайд презентации: Обработка строк В C++
Лягинова О.Ю., канд.пед.наук, доцент
Слайд 2: План
Строки в языке программирования С++ Операции над строками Функции работы со строками Литература
Слайд 3: Литература
План C/C++. Программирование на языке высокого уровня / Т. А. Павловская. — СПб.: Питер, 2003. — 461с: ил. Строки в C++ [ электронный ресурс ]. URL // https://docs.microsoft.com/ru-ru/cpp/standard-library/basic-string-class?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DRU-RU%26k%3Dk(XSTRING%2Fstd%3A%3Abasic_string%3A%3Ainsert)%3Bk(std%3A%3Abasic_string%3A%3Ainsert)%3Bk(insert)%3Bk(DevLang-C%2B%2B)%3Bk(TargetOS-Windows)%26rd%3Dtrue
Слайд 4: Строковый тип данных
Строкой называется последовательность символов. Для работы со строками используется тип string. Для использования этого типа его необходимо подключить в код с помощью директивы # include <string> Количество символов в строке определяет ее длину. Номера позиций символов строки начинается с 0.
Слайд 5: Примеры описания строк
#include " stdafx.h " #include <iostream> #include <string> using namespace std ; int main() { string s1 = "Hello, "; string s2 = "my friend!"; cout << s1 + s2 << endl ; return 0; }
Слайд 6: Строковые константы
Строковые константы записываются как последовательности символов, ограниченные кавычками. Допускается формирование строк с использованием записи символов по десятичному коду (в виде ( char ) и кода символа). Например: " C++ " (char) 9 // TAB (char)32 //пробел
Слайд 7: Типизированная константа
Объявление константы для типа string осуществляется следующим образом: const string S= " C++ " ;
Слайд 8: Пустая строка
Существует понятие пустой строки, т.е. строки, которая не содержит символов. Если при определении переменной типа string мы не присваиваем ей никакого значения, то по умолчанию данная переменная содержит пустую строку. Пустая строка также обозначается двумя рядом стоящими кавычками, например, S= "" ;
Слайд 9: Обращение к символу в строке
К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке. Например, для обращения к пятому символу строки s следует записать s[4]. План #include " stdafx.h " #include <iostream> #include <string> using namespace std ; int main() { string s = "Hell o, my friends!"; cout << s[4] << endl ; return 0; }
Слайд 10: Присваивание значений
Значения строк можно присваивать друг другу. #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; }
Слайд 11: Конкатенация строк
Строки можно сцеплять с помощью операции конкатенации, которая обозначается знаком +. #include " stdafx.h " #include <iostream> #include <string> using namespace std ; int main() { string s1 = "C++ - "; string s2 = "programming language"; string s3; s3 = s1 + s2 ; cout << s3 << endl ; return 0; }
Слайд 12: Сравнение строк
Строки можно сравнивать друг с другом с помощью операций отношения (==, !=, <, >, <=, >= ). При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Оператор == возвращает true, если все символы обеих строк равны. При этом символы должны совпадать в том числе по регистру. Операция != возвращает true, если две строки не совпадают.
Слайд 13: Сравнение строк
Остальные базовые операции сравнения (<, <=, >, >=) сравнивают строки в зависимости от кода символа. Например, строка "b" условно больше строки "a", так как символ b по алфавиту идет после символа a. А строка "a" больше строки "A". Если первые символы строки равны, то сравниваются последующие символы.
Слайд 14: Сравнение строк
#include " stdafx.h " #include <iostream> #include <string> using namespace std ; bool b1, b2, b3; int main() {b1 = " abc " == " abc " ; cout << b1 << endl ; b2 = "one" < "one s " ; cout << b2 << endl ; b3 = " ab c " > " ab b c " ; cout << b3 << endl ; return 0; }
Слайд 15: Коррекция символов строки
Можно осуществлять коррекцию любого символа строковой переменной, для чего в соответствующем операторе достаточно указать имя переменной типа string, вслед за которым в квадратных скобках задается номер корректируемого символа. Нумерация символов начинается с 0.
Слайд 16: Коррекция символов строки
План #include " stdafx.h " #include <iostream> #include <string> using namespace std ; int main() { string s = "bet"; s[0] = 'p'; cout << s << endl ; return 0; }
Слайд 17: Функции
Возвращает текущее количество элементов в строке. length max_size Возвращает максимальное количество символов в строке. clear Удаляет все элементы строки. append Добавляет символы в конец строки. assign Назначает значения новых символов содержимому строки.
Слайд 18
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; }
Слайд 19: Функция insert
Вставляет подстроку в указанное положение в строке. int main() { string str1("Hello world"); cout << "The new string str1 is: " << str1.insert(6, "my !", 3) << endl ; return 0; } Где: 6 – позиция в строке, начиная с которой выполняется вставка подстроки; "my !" – вставляемая подстрока; 3 – количество символов подстроки, вставляемых в строку.
Слайд 20: Функция find
Ищет первую позицию вхождения подстроки в строку. Если вхождение не найдено, возвращается значение string:: npos int main() { string str1("Hell o w o rld!"); cout << str1.find(" world ") << endl ; /*возвращает первую позицию вхождения подстроки */ cout << str1.find("o") << endl ; /*возвращает первое вхождение символа */ cout << str1.find("o",6) << endl ; /*возвращает первое вхождение символа, начиная с 6 позиции в строке*/ return 0; }
Слайд 21: Функция Copy s
Копирует не более указанного количества символов из индексированного положения в исходной строке в массив символов назначения (аргументы: массив, в который осуществляется копирование; размер массива; количество копируемых символов; позиция начала копирования). int main() {string str1("Hello World ! "); char array1[20] = {0}; char array2[10] = {0}; str1._Copy_s(array1, 20, 1 1 ); 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; }
Слайд 22: Функция Erase
Удаляет символ или диапазон символов с указанного положения в строке (аргументы: индекс первого удаляемого символа, количество удаляемых символов). int main() { string str1("The mother cleans frame."); str1.erase(17, 6); cout << str1 << endl ; return 0; }
Слайд 23: Преобразование типов
int main() { string st = "123"; int a = stoi ( st ); //преобразование строки в целое число cout << a << '\n'; int b = 278; st = to_string (b); //преобразование числа в строку cout << st << '\n'; return 0; } http://www.cplusplus.com/reference/string/
Слайд 24: Пример 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; }
Слайд 25: Пример 2
Необходимо выписать все гласные буквы из данной строки, сохранив их последовательность (учитывать и прописные, и строчные буквы). int main() { string str1("Hello WOrld !"), str3; string str2(" BDGJNMRVZWCFHKLQPST X bdgjnmrvzwcfhklqpstx "); for ( int i = 0; i < str1.length(); i ++) if (str2.find(str1[ i ]) != string:: npos ) str3 += str1[ i ]; cout << str3 << endl ; return 0; }
Слайд 26: Пример 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; } Необходимо написать программу обработки строки, выводящую через запятую все слова строки. План