Кількість речень#912

Кількість речень (Розбір)

Речення може завершуватися одним з наступних знаків: крапкою, окличним або питальним знаком. На кінці речення можуть стояти декілька знаків пунктуації – наприклад трьома крапками або три окличних знаки. Тому кінець речення будемо відстежувати так: поточний символ має бути одним із '.', '!', '?', а попередній символ таким не має бути. Тобто вхідний текст містить стільки речень, скільки існує пар стоячих поряд символів, що другий з них належить множині {'.', '!', '?'}, а перший - ні.

Реалізація алгоритму

Читаємо посимвольно вхідні дані. У змінній cnt підраховуємо кількість пропозицій.

prev = cnt = 0;
while(scanf("%c",&ch), ch != '\n')
{
    // Змінна `ch` містить поточний символ, а `prev` попередній. Пропозиція вважається закінченою, якщо ми досягли одного з трьох знаків пунктуації, а попередній символ таким не є.
    if ((ch == '.' || ch == '!' || ch == '?') && !(prev == '.' || prev == '!' || prev == '?')) cnt++;
    prev = ch;
}
// Виводимо кількість пропозицій.
printf("%d\n",cnt);

Java реалізація

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner con = new Scanner(System.in);
        String s = con.nextLine();
        
        int cnt = 0;
        for(int i = 0; i < s.length() - 1; i++)
        {
            if ((s.charAt(i+1) == '.' || s.charAt(i+1) == '!' || s.charAt(i+1) == '?') && !(s.charAt(i) == '.' || s.charAt(i) == '!' || s.charAt(i) == '?')) cnt++;
        }
        System.out.println(cnt);
    }
}