Выделение чисел из строки - C (СИ)

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

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

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

Решение задачи: «Выделение чисел из строки»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N 80
int main()
{
    char str[N], *first, *last;
    int i, flag = 0;
    puts("Enter line:");
    fgets(str, N, stdin);
    for( i = 0; str[i]; i++){
        if(!flag){
            if((str[i] >= '0' && str[i] <= '9') || str[i] == '-'){
                first = &str[i];
                flag = 1;
            }
        }
        else{
            if(str[i] < '0' || str[i] > '9'){
                last = &str[i];
                flag = 0;
                if(last - first > 1){
                    if(*first == '0'){ //если число начинается с нуля или нескольких нулей
                        while((first < last - 1) && *first == '0')//убираем нули
                            first++;
                    }
                    if(*first == '-' && *(first + 1) == '0'){ //если после минуса ноль
                        putchar('-');
                        first++;
                        while((first < last - 1) && *first == '0')//убираем нули
                            first++;
                    }
                    while(first < last)
                        putchar(*first++);
                    putchar('\n');
                }
                else{ //если число из одной цифры
                    if(*first != '-'){ //минус без чмсла не печатаем
                        putchar(*first);
                        putchar('\n');
                    }
                }
                if(str[i] == '-'){ //если между числами минус
                    first = &str[i];
                    flag = 1;
                }
            }
        }
    }
    return 0;
}

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

  1. Объявлены переменные: char str[N], first, last; int i, flag = 0;
  2. Выводится приглашение для ввода строки: puts(Enter line:);
  3. Вводится строка с помощью функции fgets(str, N, stdin).
  4. В цикле for( i = 0; str[i]; i++){ происходит проход по каждому символу строки.
  5. Внутри цикла проверяется, является ли текущий символ числом или знаком минус.
  6. Если текущий символ является числом или знаком минус, то запоминаются начальный и конечный индексы числа.
  7. Если текущий символ не является числом, то проверяется, является ли он нулем. Если да, то удаляются все нули в начале числа.
  8. Если текущий символ является знаком минус, то проверяется, следует ли за ним ноль. Если да, то выводится знак минус.
  9. Выводится число, начиная с первого символа после нулей и минуса и до последнего символа числа.
  10. Если число состоит из одной цифры, то выводится эта цифра.
  11. Если между числами стоит знак минус, то выводится знак минус.
  12. Возвращается 0, что означает успешное завершение работы программы.

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


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

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

5   голосов , оценка 3.2 из 5
Похожие ответы