В строке найти максимальное и минимальное число - C (СИ)
Формулировка задачи:
В заданной строке найти минимальное и максимальное целое число (числа могут быть отрицательными, в этом случае знак “минус” перед ними ставится без пробела). Предусмотреть случай, когда в строке чисел нет.
Входные данные:
a*bc&19-l sb3>4-5z%x
Выходные данные:
max=19
min=-5
Решение задачи: «В строке найти максимальное и минимальное число»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int i_sort(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
int main(void)
{
int i, j = 0;
char *word;
int digit[80];
char text[] = "a*bc&19-l sb3>4-5z%x";
// char text[] = "a*bc&19-l sb3>4-5z%x :kjfasdf394 lskdj 3333"; //вариант проверки
// char text[] = "a*bc&-lsb>-z%x:kjfasdflskdj"; //проверка вывода ошибки
char buff[80];
for(i = 0; i < sizeof(text); i++)
{
if(isdigit(text[i]) || (text[i] == '-' && isdigit(text[i+1])))
{
buff[j] = text[i];
if(!isdigit(text[i+1]))
{
j++;
buff[j] = ' ';
}
j++;
}
}
if(j == 0)
puts("ERROR: цифр в строке не найдено"), exit(1);
word = strtok(buff, " ");
for(i = 0; word != NULL; i++)
{
digit[i] = atoi(word);
word = strtok(NULL, " ");
}
i--;
puts("Обнаружен ряд цифр в строке:");
for(j = 0; j < i; j++)
printf("%d ", digit[j]);
qsort(digit, i, sizeof(int), i_sort);
puts("\nОтсортированый массив:");
for(j = 0; j < i; j++)
printf("%d ", digit[j]);
puts("\nВывод крайних значений:");
printf("max=%d\nmin=%d\n", digit[i-1], digit[0]);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Создаем функцию сортировки, которая будет сравнивать два числа
- В функции main() создаем переменные и строки для работы программы
- Проходим по каждому символу в строке и проверяем, является ли он числом или знаком, если да, то добавляем его в буфер
- Если после прохода по всем символам в буфере пусто, выводим сообщение об ошибке и завершаем программу
- Проходим по каждому слову в буфере и преобразуем его в число, сохраняем числа в массиве
- Сортируем массив чисел
- Выводим отсортированный массив чисел
- Выводим максимальное и минимальное значение из массива чисел