Методы для работы со строками



Занятие 8.                             Строки                         10.11.2018

Сегодня мы изучаем строки – одну из самых полезных вещей в реальных задачах. Мы уже немного с ними работали — например, когда выводили конкретную строку в кавычках.

Чтение строк

Для начала вам нужно подключить библиотеку string. То, что в русском языке называется одним словом «строка», в английском может означать разное. «string» – это строка как последовательность символов, а «line» – последовательность символов, оканчивающаяся переводом строки (нечто похожее на наш «абзац»).

Решим такую задачу: пользователь вводит свое имя, а программа здоровается с ним. Полное решение будет записано так:


#include <iostream>
#include <string>using namespace std;int main()
{
string s;
cin >> s;
cout << "Hello, " + s;
return 0;
}

В этой программе мы воспользовались сложением строк – они просто склеились. Можно было сделать то же самое, просто выведя отдельно «Hello, » и переменную s.

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


Часто возникает необходимость считать строку (в понимании line) целиком, а не пословно. Для этого есть специальная функция getline(cin, s). Первый параметр в этой функции указывает на поток ввода (cin), а второй – на строку, в которую нужно считывать.

Коды символов

В компьютере всё, в том числе и строки, хранится в виде чисел (строка – набор чисел, которыми кодируются символы). Для хранения одного символа используется тип char (от слова character, символ).

Можно обращаться к отдельным символам строки, написав после её имени в квадратных скобках номер символа. Нумерация символов в строке начинается с нуля, так же как и в массивах и векторах. Узнать длину строки можно с помощью метода size.

Рассмотрим на программу, которая считывает строку, сохраняет первый (на самом деле нулевой) символ строки в переменную типа char и выводит его:


string s;
char c;
cin >> s;
c = s[0];
cout << c;

Когда мы выводим переменную типа char, то выводится символ. Хотя на самом деле char – числовая переменная и обозначает номер символа в кодовой таблице. По аналогии с переводом вещественных чисел в целые мы можем сделать перевод из типа char в тип int, чтобы узнать код символа. Вывод кода символа выглядит так:

cout << (int) c;

Сам по себе код символа для нас не несет никакой пользы, но важно знать, что в кодовой таблице символы расположены по порядку. То есть код маленькой латинской буквы b на единицу больше кода буквы a и так далее. Где-то отдельно в этой таблице лежат цифры, также расположенные по порядку (0 идет перед 1).

Выделение цифр числа

Теперь приступим к решению большой задачи: получим из html-кода страницы информацию о курсах акций, чтобы заработать на их колебаниях кучу денег. Первым делом нам нужно выделить из строки только цифры. Мы будем считать, что в строке есть только одно целое число и его и нужно получить. Для решения этой задачи мы будем проходить по всей строке и, если символ – цифра, будем её печатать.


string s;
getline(cin, s);
for (int i=0; i < s.size; i++) {
if (s[i] >= '0' && s[i] <= '9')
cout << s[i];
}

В этой программе мы проходим по всем символам строки (так же, как мы проходили по всем элементам массива). Еще мы научились узнавать код конкретного символа – для этого нужно записать этот символ в одинарных кавычках. Если код очередного символа лежит в пределах от 0 до 9, то этот символ – цифра.


Поиск подстроки в строке

Вернемся к нашей задаче по зарабатыванию денег. Пусть в скачанном нами файле содержится много строк, но нам интересна только та, где есть название компании, акциями которой мы хотим торговать. Например, это «Рога и копыта» с кодом на бирже rkpt. Дальше наша задача усложняется: среди N строк нужно найти ту, которая содержит подстроку rkpt (то есть где-то внутри строки встречается эта последовательность символов) и вывести число, записанное в этой строке. К счастью, у строк есть много методов, способных облегчить нашу жизнь. Например, метод find, который как раз предназначен для поиска подстроки в строке. Код решения выглядит так:

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 (int i=0; i <s.size; i++) {
if (c >= '0' && c <= '9')
cout << c;
}
}
}

Изменение регистра символа

Рассмотрим ещё один случай. Допустим, название компании может быть написано как большими, так и маленькими буквами или даже вперемешку. А значит нам нужно научиться определять регистр. Чтобы проверить, является ли символ в переменной заглавной буквой, достаточно написать следующее условие:

if (c >= 'A' && c <= 'Z')

Это возможно, потому что буквы расположены в алфавитном порядке. Теперь мы можем определить, какая по счёту буква алфавита нам встретилась:

int temp = c – 'A’;

Поскольку переменная на самом деле является числом, мы можем вычитать один символ из другого — это будет просто вычитание одного кода из другого. Теперь, чтобы получить в переменной c соответствующую маленькую букву, нужно к коду буквы «a» (маленькой) прибавить порядковый номер нужной буквы в алфавите:

c = 'a' + temp;

Ну и наконец, если мы хотим преобразовать все буквы в строке, то должны заранее создать пустую строку:

string s2 = "";

А затем добавлять к ней символы по одному.

Методы для работы со строками


 

acmp.ru / Курсы / Язык программирования С++ /

/ Строковые типы данных / Символьный тип /

Количество нулей

(Время: 1 сек. Память: 16 Мб Сложность: 9%)

Дано натуральное число N. Требуется определить количество нулей среди цифр данного числа.

Входные данные: Входной файл input.txt содержит натуральное число N (N ≤ 1030).

input.txt output.txt
1 1024 1
2 102003000 6

Выходные данные: В выходной файл output.txt выведите число нулей в числе N.

Удаление цифр

(Время: 1 сек. Память: 16 Мб Сложность: 10%)

Дана строка, состоящая из английских букв, специальных символов и цифр. Необходимо удалить в ней все цифры 4 и 7.

Входные данные: Входной файл input.txt содержит строку S, состоящую из символов с ASCII-кодами от 33 до 127. Длина строки не превосходит 100.

Выходные данные: В выходной файл output.txt выведите исходную строку без цифр 4 и 7.

input.txt output.txt
1 0123456789 01235689
2 Ace_02Frame57Task48! Ace_02Frame5Task8!

Простой шифр

(Время: 1 сек. Память: 16 Мб Сложность: 13%)

Каким может быть самый простой способ зашифровать строку? Есть способы, для которых не требуется применять много усилий и обладать специальными познаниями. Одним из таких способов является простой сдвиг букв. Под сдвигом понимается замена буквы на предыдущую в алфавите. Если предыдущей буквы нет, она заменяется на последнюю букву алфавита (в этой задаче мы имеем дело с английским алфавитом).

input.txt output.txt
1 bnqqdbs correct

Вам прислали секретное сообщение, зашифрованное способом, описанным выше и состоящее из строчных английских букв. Расшифруйте его и выведите.

Входные данные: Входной файл input.txt содержит строку S длиной от 1 до 100 символов, состоящую из строчных английских букв.

Выходные данные: В выходной файл output.txt выведите расшифрованную строку.

Вставка символов

(Время: 1 сек. Память: 16 Мб Сложность: 14%)

Дана строка. Требуется между ее символами вставить символ «#» (ASCII 35).

input.txt output.txt
1 VisualC V#i#s#u#a#l#C
2 INSERT I#N#S#E#R#T

Входные данные: Входной файл input.txt содержит строку, состоящую только из английских букв. Строка содержит от 1 до 100 букв.

Выходные данные: В выходной файл output.txt выведите строку, полученную из исходной, путем вставки символа «#» между всеми ее буквами.

. Ваша задача написать программу, которая определяет, сколько кругляшей в числе.

Входные данные:Во входном файле input.txt записано целое число N (0 ≤ N ≤ 10100).

Пароль

(Время: 1 сек. Память: 16 Мб Сложность: 15%)

Пароль называется криптостойким, если он включает в себя хотя бы одну строчную английскую букву, хотя бы одну заглавную английскую букву и хотя бы одну цифру, при этом его длина должна быть не менее 12 символов.

Требуется по данному паролю определить, является ли он криптостойким.

input.txt output.txt
1 VasyaPupkin007 Yes
2 13x666S No
3 PupkinVasiliyVasilyevich No

Входные данные: Входной файл input.txt содержит строку, состоящую только из английских букв и цифр. Длина строки не превосходит 100.

Выходные данные: В выходной файл output.txt выведите «Yes», если пароль является криптостойким и «No» – в противном случае.

 

acmp.ru / Курсы / Язык программирования С++ /

/ Строковые типы данных / Строковый тип /

Стрелки

(Время: 1 сек. Память: 16 Мб Сложность: 20%)

Задана последовательность, состоящая только из символов ‘>’, ‘<’ и ‘-‘. Требуется найти количество стрел, которые спрятаны в этой последовательности. Стрелы – это подстроки вида ‘>>-->’ и ‘<--<<’.

Входные данные: В первой строке входного файла input.txt записана строка, состоящая из символов ‘>’, ‘<’ и ‘-‘ (без пробелов). Строка состоит не более, чем из 250 символов.

Выходные данные: В единственную строку выходного файла output.txt нужно вывести искомое количество стрелок.

input.txt output.txt
1 <<<<>>--><--<<--<<>>>--><<<<< 4

 

Интересные задачи из архива задач:

Орфография

(Время: 1 сек. Память: 16 Мб Сложность: 13%)

У студента-филолога Васи есть замечательный друг Петя. И Петя никак не может выучить английский язык. Английский текст Петя еще кое-как читает, но пишет с ужасными ошибками, причем чаще всего он вставляет в слова лишние буквы.

Вася решил помочь Пете. Теперь каждый день Вася диктует Пете слова, а Петя их записывает. После семестра занятий Петя стал писать много лучше и теперь делает в словах только по одной ошибке. Чтобы автоматизировать процесс исправления ошибок, Вася просит Вас написать программу, которая удаляет из слова одну лишнюю букву и показывает Пете правильное слово.

Входные данные: Входной файл INPUT.TXT содержит целое число K - номер лишней буквы, а затем через один или несколько пробелов записано слово S, состоящее из английских букв верхнего регистра. Гарантируется, что номер буквы не превышает длину слова. Длина слова не более 80 символов.

Выходные данные: В выходной файл OUTPUT.TXT выведите исправленное слово.


Дата добавления: 2019-01-14; просмотров: 1549; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!