Поиск кратчайшего числа из строки - C (СИ)

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

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

Здравствйте. Есть такая задача:

Составить программу, которая выделяет отдельные целые числа из введенной пользователем строки. Числом считается последовательность цифр, разделяемых одним или несколькими пробелами, которая может включать знак минус, стоящий в начале. Найти в строке число, содержащее наименьшее количество цифр.

Я смог составить программу, которая выделяет эти числа и находит количество. Но как найти самое короткое из них? Помогите, пожалуйста Вот код
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(void){
  5. char s[100];
  6. gets(s);
  7. int n = strlen(s), flag = 0, k = 0, current = 0;
  8. for (int i = 0; i < n; i++){
  9. if ( (s[i] >= '0') && (s[i] <= '9') ){ /* если число*/
  10. if (flag == 1/* проверяем,что стояло перед числом,1-стояла не цифра*/){
  11. printf(" %c", s[i]);
  12. flag = 0;
  13. }
  14. else printf("%c", s[i]);
  15. if (current == 0/*если перед числом стоял символ*/){
  16. k++;
  17. current = 1;
  18. }
  19. }
  20. else
  21. if ( (s[i] == '-') && (s[i+1] >= '0') && (s[i+1] <= '9') ) {
  22. current = 0;
  23. flag = 0;
  24. if (k > 0)
  25. printf(" %c", s[i]);
  26. else
  27. printf("%c", s[i]);
  28. }
  29. else {
  30. flag = 1;
  31. current = 0;
  32. }
  33. }
  34. printf("\nKol-vo = %d\n", k);
  35. return 0;
  36. }

Решение задачи: «Поиск кратчайшего числа из строки»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int text(char *str)
  5. {
  6.     int num_min_len[2], flag = 1, n;// num..[0] - число num..[1] - длина числа; flag - проверка на первое вхождение, чтоб задать первичные даныее в num..[]; n - число
  7.     while(*str){                    // Пока есть символы...
  8.         n = 1;                      // не 0, т.к. дальше мы умножаем n само на себя..
  9.         if(*str == '-'){            // Если наткнулись на ' - '...
  10.             n = -1;                 // n = -1 , и при n*=atoi(str) получим отрицательное число..
  11.             ++str;                  // переходим к след. символу..
  12.         }
  13.         if((*str >= '0') && (*str <= '9')){ // Если поймали цифру...
  14.             n *= atoi(str);                 // преобразовываем символы 0-9 в число..
  15.             int n2 = n;                     // чтоб при подсчете не потерять n создаем n2 инициализированную n
  16.             size_t count = 0;               // счетчик..
  17.             while(n2){                    // Считаем длину числа...
  18.                 n2/=10;
  19.                 ++count;
  20.             }
  21.             if(flag == 1){                // Собственно проверка на первое вхождение..
  22.                 num_min_len[0] = n;
  23.                 num_min_len[1] =count;
  24.                 flag = 0;
  25.             }
  26.             else{
  27.                 if(count < num_min_len[1]){// Сравнение длины числа..
  28.                     num_min_len[0] = n;
  29.                     num_min_len[1] = count;
  30.                 }
  31.             }
  32.             str+=count;                    // пропускае кол-во символов равное count..
  33.         }
  34.         else str++;                        // Переходим к след символу, если не 0-9
  35.     }
  36.     return num_min_len[0];         // Возвращаем первое короткое число.
  37. }
  38.  
  39. int main(void)
  40. {
  41.     printf("Enter string ('0-9' and '-'): ");
  42.     char str[50] = {'\0'};
  43.     gets(str);
  44.     printf("Result: %d", text(str));
  45.     return 0;
  46. }

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

  1. Входные данные: строка, в которой содержатся числа и знак минус.
  2. Выходные данные: кратчайшее число из строки.
  3. Если входная строка пустая, то выводится сообщение об ошибке.
  4. Функция text() выполняет следующие действия:
    • инициализирует два указателя на массив num_min_len[], чтобы хранить результат.
    • устанавливает флаг = 1.
    • проходит по каждому символу входной строки.
    • если символ является числом от 0 до 9, то преобразует его в число и сохраняет его в переменной n.
    • затем преобразует n в строку и сравнивает длину этой строки с длиной текущего минимального числа.
    • если длина равна или меньше, то обновляет переменные num_min_len[] и устанавливает флаг = 0.
    • после прохода по всей строке, возвращает первое короткое число.
  5. В функции main() происходит следующее:
    • запрашивает у пользователя строку.
    • сохраняет эту строку в массив str[].
    • вызывает функцию text(str[]) и выводит результат.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы