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

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

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

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

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

Я смог составить программу, которая выделяет эти числа и находит количество. Но как найти самое короткое из них? Помогите, пожалуйста Вот код
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
 
int main(void){ 
char s[100]; 
gets(s); 
int n = strlen(s), flag = 0, k = 0, current = 0; 
for (int i = 0; i < n; i++){ 
if ( (s[i] >= '0') && (s[i] <= '9') ){ /* если число*/ 
if (flag == 1/* проверяем,что стояло перед числом,1-стояла не цифра*/){ 
printf(" %c", s[i]); 
flag = 0; 
} 
else printf("%c", s[i]); 
if (current == 0/*если перед числом стоял символ*/){ 
k++; 
current = 1; 
} 
} 
else 
if ( (s[i] == '-') && (s[i+1] >= '0') && (s[i+1] <= '9') ) { 
current = 0; 
flag = 0; 
if (k > 0) 
printf(" %c", s[i]); 
else 
printf("%c", s[i]); 
} 
else { 
flag = 1; 
current = 0; 
} 
} 
printf("\nKol-vo = %d\n", k); 
        
return 0;
}

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int text(char *str)
{
    int num_min_len[2], flag = 1, n;// num..[0] - число num..[1] - длина числа; flag - проверка на первое вхождение, чтоб задать первичные даныее в num..[]; n - число
    while(*str){                    // Пока есть символы...
        n = 1;                      // не 0, т.к. дальше мы умножаем n само на себя..
        if(*str == '-'){            // Если наткнулись на ' - '...
            n = -1;                 // n = -1 , и при n*=atoi(str) получим отрицательное число..
            ++str;                  // переходим к след. символу..
        }
        if((*str >= '0') && (*str <= '9')){ // Если поймали цифру...
            n *= atoi(str);                 // преобразовываем символы 0-9 в число..
            int n2 = n;                     // чтоб при подсчете не потерять n создаем n2 инициализированную n
            size_t count = 0;               // счетчик..
            while(n2){                    // Считаем длину числа...
                n2/=10;
                ++count;
            }
            if(flag == 1){                // Собственно проверка на первое вхождение..
                num_min_len[0] = n;
                num_min_len[1] =count;
                flag = 0;
            }
            else{
                if(count < num_min_len[1]){// Сравнение длины числа..
                    num_min_len[0] = n;
                    num_min_len[1] = count;
                }
            }
            str+=count;                    // пропускае кол-во символов равное count..
        }
        else str++;                        // Переходим к след символу, если не 0-9
    }
    return num_min_len[0];         // Возвращаем первое короткое число.
}
 
int main(void)
{
    printf("Enter string ('0-9' and '-'): ");
    char str[50] = {'\0'};
    gets(str);
    printf("Result: %d", text(str));
    return 0;
}

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

  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
Похожие ответы