Поиск кратчайшего числа из строки - 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;
- }
Объяснение кода листинга программы
- Входные данные: строка, в которой содержатся числа и знак минус.
- Выходные данные: кратчайшее число из строки.
- Если входная строка пустая, то выводится сообщение об ошибке.
- Функция text() выполняет следующие действия:
- инициализирует два указателя на массив num_min_len[], чтобы хранить результат.
- устанавливает флаг = 1.
- проходит по каждому символу входной строки.
- если символ является числом от 0 до 9, то преобразует его в число и сохраняет его в переменной n.
- затем преобразует n в строку и сравнивает длину этой строки с длиной текущего минимального числа.
- если длина равна или меньше, то обновляет переменные num_min_len[] и устанавливает флаг = 0.
- после прохода по всей строке, возвращает первое короткое число.
- В функции main() происходит следующее:
- запрашивает у пользователя строку.
- сохраняет эту строку в массив str[].
- вызывает функцию text(str[]) и выводит результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д