Постановка задачи
e-olymp 912. Количество предложений
Определить количество предложений в заданном фрагменте текста.
Входные данные
В единственной строке задан фрагмент текста на английском языке, количество символов в котором не превышает 250. Гарантируется, что в тексте отсутствуют тире, дефисы, цифры и числа.
Выходные данные
Единственное число — количество предложений в фрагменте.
Алгоритм решения
Нужно заметить, что каждое предложение может заканчиваться точкой, восклицательным знаком или вопросительным знаком. Значит, если в тексте мы нашли какой-то из этих символов, то мы нашли и предложение. Но возникает проблема. Предложение может заканчиватся несколькими знаками препинания (к примеру, многоточием). Так как многоточие — это три поставленых рядом точки, то, если считать количество предложений как количество знаков препинания, которыми может заканчиваться предложение, мы, вероятнее всего, допустим ошибку. Это решается легким путем: при встрече таких знаков, идущих подряд, мы берем во внимание только один из них, игнорируя остальные. Таким образом мы можем подсчитать количество предложений.
Тесты
Входные данные | Выходные данные |
Hello, World! | 1 |
Those lips that Love’s own hand did make Breathed forth the sound that said ‘I hate,’ To me that languish’d for her sake: But when she saw my woeful state, Straight in her heart did mercy come, ‘I hate’ she alter’d with an end, ‘I hate’ from hate away she threw, |
1 |
Winter… | 1 |
Winter | 0 |
Реализация
ideone: ссылка
Засчитаное решение: ссылка
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <iostream> using namespace std; bool isNeededChar(char c) { switch(c) { case '.': case '!': case '?': return true; default: return false; } } int main() { int counter = 0; string text; getline(cin, text); for(int i = 1; i < text.length(); i++) { if(isNeededChar(text.at(i))) { if(!isNeededChar(text.at(i - 1))) { counter++; } } } cout << counter << endl; return 0; } |
Принято. Молодец.
Хотя функцию isNeededChar() можно реализовать одной строкой return c == '.' || c == '!' || c == '?'. А для вызова в виде функции подошло бы макроопределение препроцессора. Помните, мы учили?