Символы между скобками - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здраствуйте, в программе надо проверить, если между скобками есть только цифры, к примеру (12345), то программа выводит ошибку, подскажите, как это реализовать

Решение задачи: «Символы между скобками»

textual
Листинг программы
#include<stdio.h>
 
int main()
{
    char s[] = "a=(11134a)sd\0";
    int i = 0, state = 0, dig = -1;
    
    while (s[i]) {
        if (s[i] == '(')
            state = 1;
        else {
            if (s[i] != ')' && state == 1) {
                if ('0' <= s[i] && s[i] <= '9') {
                    if (dig == -1)
                        dig = 1;
                }
                else
                    dig = 0;
            }
            else if (s[i] == ')') {
                    state = 2;
                    break;
                }
        }
        i++;
    }
    
    if (state != 2 || dig == -1)
        printf("invalid expression");
    else {
        if (dig == 1)
            printf("error");
        else
            printf("ok");
    }
 
    getchar();
    return 0;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Объявляем переменную s типа char массив с пустым строковым литералом a=(11134a)sd\0 в качестве инициализатора
  3. Объявляем переменные i, state и dig типа int со стартовыми значениями 0
  4. Входим в цикл while, который будет выполняться до тех пор, пока s[i] не станет нулевым (что означает конец строки)
  5. Внутри цикла проверяем, равно ли текущее значение s[i] '('
  6. Если да, то переводим state в 1, иначе переводим state обратно в 0
  7. Если s[i] не равно ')', и state равно 1, то проверяем, является ли текущее значение s[i] числом от 0 до 9 (используя символы строки для сравнения)
  8. Если текущее значение s[i] является числом от 0 до 9, то переводим dig в 1, иначе переводим dig обратно в -1
  9. Если s[i] равно ')', то переводим state в 2 и прерываем цикл с помощью оператора break
  10. После окончания цикла проверяем, равно ли state 2 и dig не равно -1 (что означает ошибку)
  11. Если это так, то выводим invalid expression
  12. Если все в порядке, то проверяем, равно ли dig 1
  13. Если это так, то выводим error
  14. Если dig не равно 1, то выводим ok
  15. Позволяем программе читать символ из стандартного ввода с помощью функции getchar
  16. Возвращаем 0, чтобы указать, что программа успешно завершилась
  17. Код не обрабатывает ситуацию, когда вводное выражение отсутствует скобки, что может привести к неопределенному поведению
  18. Код также не обрабатывает ситуацию, когда вводное выражение содержит несколько чисел, разделенных пробелами, что может привести к неправильной обработке
  19. Код не обрабатывает ситуацию, когда вводное выражение содержит числа, которые не являются действительными десятичными числами, что может привести к неправильной обработке
  20. Код не обрабатывает ситуацию, когда вводное выражение содержит символы, которые не являются числами или скобками, что может привести к неправильной обработке

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы