Выделение чисел из строки - 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;
}
Объяснение кода листинга программы
- Объявлены переменные: char str[N], first, last; int i, flag = 0;
- Выводится приглашение для ввода строки:
puts(
Enter line:); - Вводится строка с помощью функции fgets(str, N, stdin).
- В цикле for( i = 0; str[i]; i++){ происходит проход по каждому символу строки.
- Внутри цикла проверяется, является ли текущий символ числом или знаком минус.
- Если текущий символ является числом или знаком минус, то запоминаются начальный и конечный индексы числа.
- Если текущий символ не является числом, то проверяется, является ли он нулем. Если да, то удаляются все нули в начале числа.
- Если текущий символ является знаком минус, то проверяется, следует ли за ним ноль. Если да, то выводится знак минус.
- Выводится число, начиная с первого символа после нулей и минуса и до последнего символа числа.
- Если число состоит из одной цифры, то выводится эта цифра.
- Если между числами стоит знак минус, то выводится знак минус.
- Возвращается 0, что означает успешное завершение работы программы.