Нахождение Минимального и Максимального элементов в строке матрицы - C (СИ)
Формулировка задачи:
Доброго времени суток всем.
прошу помочь с задачей:
В заданной строке найти минимальное и максимальное целое число (числа могут быть отрицательными, в этом случае знак “минус” перед ними ставится без пробела). Предусмотреть случай, когда в строке чисел нет.
Входные данные:
a*bc&19-l sb3>4-5z%x
Выходные данные:
max=19
min=-5
Решение задачи: «Нахождение Минимального и Максимального элементов в строке матрицы»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
int main() {
char text[256];
char* p = text;
int min = INT_MAX, max = INT_MIN;
int val, minus;
fgets(text, sizeof(text), stdin);
while (*p) {
if (isdigit(*p)) {
minus = ((text < p) && (*(p - 1) == '-'));
val = atoi(p) * (1 - 2 * minus);
while (isdigit(*(++p))) { ; }
if (val < min) {
min = val;
}
if (max < val) {
max = val;
}
}
else {
p++;
}
}
if ((max == INT_MIN) || (min == INT_MAX)) {
printf("error: digits not found ...\n");
}
else {
printf("max = %d\nmin = %d\n", max, min);
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью, строками и математическими операциями
- Объявляем переменные: текстовый буфер для ввода, указатель на первый символ в этом буфере, переменные для хранения минимального и максимального значения, а также переменные для обработки числовых значений
- Считываем строку из стандартного ввода с помощью функции fgets
- Перемещаем указатель на первый символ в буфере
- Инициализируем переменные min и max значениями, которые соответствуют максимально большому и минимальному значению типа int
- Проходим по каждому символу в буфере
- Проверяем, является ли текущий символ числом. Если это так, то извлекаем его числовое значение, учитывая его знак
- Обновляем значения min и max, если найденные числа меньше или больше текущих значений min и max соответственно
- Проверяем, были ли найдены действительные числа. Если нет, выводим сообщение об ошибке
- Выводим значения min и max на стандартный вывод
- Возвращаем 0, чтобы указать, что программа успешно завершилась