Рубрики

Проверьте данное предложение для данного набора простых правил грамматики

Простое предложение, если синтаксически правильное, если оно соответствует заданным правилам. Ниже приведены правила.

1. Приговор должен начинаться с заглавной буквы (например, существительное / I / We / He и т. Д.)
2. Затем следует строчная буква.
3. Между словами должны быть пробелы.
4. Затем предложение должно заканчиваться точкой (.) После слова.
5. Два непрерывных пробела не допускаются.
6. Два непрерывных символа в верхнем регистре не допускаются.
7. Однако предложение может заканчиваться после символа верхнего регистра.

Примеры:

Correct sentences -
   "My name is Ram."
   "The vertex is S."
   "I am single."
   "I love Geeksquiz and Geeksforgeeks."

Incorrect sentence - 
   "My name is KG."
   "I lovE cinema."
   "GeeksQuiz. is a quiz site."
   "  You are my friend."
   "I love cinema" 

Вопрос: Учитывая предложение, подтвердите данное предложение для приведенных выше правил.

Мы настоятельно рекомендуем свернуть браузер и попробовать это в первую очередь.
Идея состоит в том, чтобы использовать автоматы для данного набора правил.

Алгоритм:
1. Проверьте угловые случаи
… ..1.a) Проверьте, является ли первый символ прописным или нет в предложении.
… ..1.b) Проверьте, является ли последний символ полной остановкой или нет.

2. Для остальной части строки эту проблему можно решить, следуя диаграмме состояний. Пожалуйста, обратитесь к диаграмме состояния ниже для этого.

3. Нам нужно поддерживать предыдущее и текущее состояние различных символов в строке. На основании этого мы всегда можем проверить предложение каждого пройденного символа.

Реализация на основе AC приведена ниже. (Кстати, это предложение также правильно в соответствии с правилом и кодом)

C ++

// C-программа для проверки заданного предложения для набора правил
#include<stdio.h>
#include<string.h>
#include<stdbool.h>

  
// Метод проверки заданного предложения по заданным правилам

bool checkSentence(char str[])

{

    // Рассчитать длину строки.

    int len = strlen(str);

  

    // Проверяем, что первый символ лежит в [AZ].

    // Иначе вернем false.

    if (str[0] < 'A' || str[0] > 'Z')

        return false;

  

    // Если последний символ не является точкой (.) Нет

    // нужно проверить дальше.

    if (str[len - 1] != '.')

        return false;

  

    // Поддерживать 2 состояния. Предыдущее и текущее состояние на основе

    // в каком состоянии вершины вы находитесь. Инициализировать как с

    // 0 = начальное состояние.

    int prev_state = 0, curr_state = 0;

  

    // Сохраняем индекс до следующего символа в строке.

    int index = 1;

  

    // Цикл для перехода по строке.

    while (str[index])

    {

        // Устанавливаем состояния в соответствии с входными символами в

        // строка и правило, определенные в описании.

        // Если текущий символ [AZ]. Установите текущее состояние как 0.

        if (str[index] >= 'A' && str[index] <= 'Z')

            curr_state = 0;

  

        // Если текущий символ - пробел. Установить текущее состояние как 1.

        else if (str[index] == ' ')

            curr_state = 1;

  

        // Если текущий символ [az]. Установить текущее состояние как 2.

        else if (str[index] >= 'a' && str[index] <= 'z')

            curr_state = 2;

  

        // Если текущее состояние - точка (.). Установить текущее состояние как 3.

        else if (str[index] == '.')

            curr_state = 3;

  

        // Проверяет все текущее состояние с предыдущим состоянием для

        // правила в описании проблемы.

        if (prev_state == curr_state && curr_state != 2)

            return false;

  

        if (prev_state == 2 && curr_state == 0)

            return false;

  

        // Если мы достигли последнего состояния, а предыдущее состояние не равно 1,

        // затем проверяем следующий символ. Если следующий символ '/ 0', то

        // вернуть true, иначе false

        if (curr_state == 3 && prev_state != 1)

            return (str[index + 1] == '\0');

  

        index++;

  

        // Установить предыдущее состояние как текущее состояние перед переходом

        // к следующему символу.

        prev_state = curr_state;

    }

    return false;

}

  
// Драйвер программы

int main()

{

    char *str[] = { "I love cinema.", "The vertex is S.",

                    "I am single.", "My name is KG.",

                    "I lovE cinema.", "GeeksQuiz. is a quiz site.",

                    "I love Geeksquiz and Geeksforgeeks.",

                    "  You are my friend.", "I love cinema" };

    int str_size = sizeof(str) / sizeof(str[0]);

    int i = 0;

    for (i = 0; i < str_size; i++)

     checkSentence(str[i])? printf("\"%s\" is correct \n", str[i]):

                            printf("\"%s\" is incorrect \n", str[i]);

  

    return 0;

}

Джава

// Java-программа для проверки заданного предложения
// для набора правил

class GFG 

{

  

    // Метод проверки заданного предложения по заданным правилам

    static boolean checkSentence(char[] str)

    {

  

        // Рассчитать длину строки.

        int len = str.length;

  

        // Проверяем, что первый символ лежит в [AZ].

        // Иначе вернем false.

        if (str[0] < 'A' || str[0] > 'Z')

            return false;

  

        // Если последний символ не является полной остановкой (.)

        // нет необходимости проверять дальше.

        if (str[len - 1] != '.')

            return false;

  

        // Поддерживать 2 состояния. Предыдущее и текущее состояние

        // в зависимости от состояния вершины.

        // Инициализируем оба с 0 = начальное состояние.

        int prev_state = 0, curr_state = 0;

  

        // Сохраняем индекс до следующего символа в строке.

        int index = 1;

  

        // Цикл для перехода по строке.

        while (index <= str.length) 

        {

  

            // Устанавливаем состояния в соответствии с введенными символами

            // в строке и в правиле, определенном в описании.

            // Если текущий символ [AZ]. Установите текущее состояние как 0.

            if (str[index] >= 'A' && str[index] <= 'Z')

                curr_state = 0;

  

            // Если текущий символ - пробел.

            // Установить текущее состояние как 1.

            else if (str[index] == ' ')

                curr_state = 1;

  

            // Если текущий символ [az].

            // Установить текущее состояние как 2.

            else if (str[index] >= 'a' && str[index] <= 'z')

                curr_state = 2;

  

            // Если текущее состояние - точка (.).

            // Установить текущее состояние как 3.

            else if (str[index] == '.')

                curr_state = 3;

  

            // Проверяет все текущее состояние с предыдущим состоянием

            // для правил в описании проблемы.

            if (prev_state == curr_state && curr_state != 2)

                return false;

                  

            if (prev_state == 2 && curr_state == 0)

                return false;

  

            // Если мы достигли последнего состояния и предыдущего состояния

            // не равно 1, затем проверьте следующий символ. Если следующий персонаж

            // is '/ 0', затем вернуть true, иначе false

            if (curr_state == 3 && prev_state != 1)

                return (index + 1 == str.length);

  

            index++;

  

            // Установить предыдущее состояние как текущее

            // перед переходом к следующему символу.

            prev_state = curr_state;

        }

        return false;

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        String[] str = { "I love cinema.", "The vertex is S."

                         "I am single.", "My name is KG."

                         "I lovE cinema.", "GeeksQuiz. is a quiz site."

                         "I love Geeksquiz and Geeksforgeeks."

                         " You are my friend.", "I love cinema" };

        int str_size = str.length;

  

        int i = 0;

        for (i = 0; i < str_size; i++)

        {

            if (checkSentence(str[i].toCharArray()))

                System.out.println("\"" + str[i] + 

                                   "\"" + " is correct");

            else

                System.out.println("\"" + str[i] + 

                                   "\"" + " is incorrect");

        }

    }

}

  
// Этот код предоставлен
// sanjeev2552

питон

# Python-программа для проверки заданного предложения для набора правил

  
# Метод проверки заданного предложения по заданным правилам

def checkSentence(string):

  

    # Рассчитать длину строки.

    length = len(string)

  

    # Убедитесь, что первый символ лежит в [AZ].

    # В противном случае верните false.

    if string[0] < 'A' or string[0] > 'Z':

        return False

  

    # Если последний символ не является точкой (.) Нет

    # нужно проверить дальше.

    if string[length-1] != '.':

        return False

  

    # Поддерживать 2 состояния. Предыдущее и текущее состояние на основе

    # в каком состоянии вершины вы находитесь. Инициализировать как с

    # 0 = начальное состояние.

    prev_state = 0

    curr_state = 0

  

    # Сохранить индекс до следующего символа в строке.

    index = 1

  

    # Цикл, чтобы перейти через строку.

    while (string[index]):

        # Установить состояния в соответствии с входными символами в

        # строка и правило, определенные в описании.

        # Если текущим символом является [AZ]. Установите текущее состояние как 0.

        if string[index] >= 'A' and string[index] <= 'Z':

            curr_state = 0

  

        # Если текущий символ - пробел. Установить текущее состояние как 1.

        elif string[index] == ' ':

            curr_state = 1

  

        # Если текущий символ - пробел. Установить текущее состояние как 2.

        elif string[index] >= 'a' and string[index] <= 'z':

            curr_state = 2

  

        # Если текущий символ - пробел. Установить текущее состояние как 3.

        elif string[index] == '.':

            curr_state = 3

  

        # Проверяет все текущее состояние с предыдущим состоянием для

        # правила в описании проблемы.

        if prev_state == curr_state and curr_state != 2:

            return False

  

        # Если мы достигли последнего состояния, а предыдущее состояние не равно 1,

        # затем проверьте следующий символ. Если следующий символ '/ 0', то

        # вернуть true, иначе false

        if prev_state == 2 and curr_state == 0:

            return False

  

        # Установить предыдущее состояние как текущее состояние перед переходом

        # до следующего символа.

        if curr_state == 3 and prev_state != 1:

            return True

  

        index += 1

  

        prev_state = curr_state

  

    return False

  
# Драйверная программа

string = ["I love cinema.", "The vertex is S.",

            "I am single.", "My name is KG.",

            "I lovE cinema.", "GeeksQuiz. is a quiz site.",

            "I love Geeksquiz and Geeksforgeeks.",

            "  You are my friend.", "I love cinema"]

string_size = len(string)

for i in xrange(string_size):

    if checkSentence(string[i]):

        print "\"" +  string[i] + "\" is correct"

    else:

        print "\"" + string[i] + "\" is incorrect"

  
# Этот код предоставлен BHAVYA JAIN


Выход:

"I love cinema." is correct
"The vertex is S." is correct
"I am single." is correct
"My name is KG." is incorrect
"I lovE cinema." is incorrect
"GeeksQuiz. is a quiz site." is incorrect
"I love Geeksquiz and Geeksforgeeks." is correct
"  You are my friend." is incorrect
"I love cinema" is incorrect

Временная сложность — O (n), наихудший случай, так как мы должны пройти через полное предложение, где n — длина предложения.
Вспомогательное пространство — O (1)

Эта статья предоставлена Кумар Гаутам . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Проверьте данное предложение для данного набора простых правил грамматики

0.00 (0%) 0 votes