Символы между скобками - 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;
}
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Объявляем переменную s типа char массив с пустым строковым литералом
a=(11134a)sd\0в качестве инициализатора - Объявляем переменные i, state и dig типа int со стартовыми значениями 0
- Входим в цикл while, который будет выполняться до тех пор, пока s[i] не станет нулевым (что означает конец строки)
- Внутри цикла проверяем, равно ли текущее значение s[i] '('
- Если да, то переводим state в 1, иначе переводим state обратно в 0
- Если s[i] не равно ')', и state равно 1, то проверяем, является ли текущее значение s[i] числом от 0 до 9 (используя символы строки для сравнения)
- Если текущее значение s[i] является числом от 0 до 9, то переводим dig в 1, иначе переводим dig обратно в -1
- Если s[i] равно ')', то переводим state в 2 и прерываем цикл с помощью оператора break
- После окончания цикла проверяем, равно ли state 2 и dig не равно -1 (что означает ошибку)
- Если это так, то выводим
invalid expression - Если все в порядке, то проверяем, равно ли dig 1
- Если это так, то выводим
error - Если dig не равно 1, то выводим
ok - Позволяем программе читать символ из стандартного ввода с помощью функции getchar
- Возвращаем 0, чтобы указать, что программа успешно завершилась
- Код не обрабатывает ситуацию, когда вводное выражение отсутствует скобки, что может привести к неопределенному поведению
- Код также не обрабатывает ситуацию, когда вводное выражение содержит несколько чисел, разделенных пробелами, что может привести к неправильной обработке
- Код не обрабатывает ситуацию, когда вводное выражение содержит числа, которые не являются действительными десятичными числами, что может привести к неправильной обработке
- Код не обрабатывает ситуацию, когда вводное выражение содержит символы, которые не являются числами или скобками, что может привести к неправильной обработке