Дана строка. Если она представляет собой запись целого числа, то вывести 1 - C (СИ) (73459)
Формулировка задачи:
Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2; если строку нельзя преобразовать в число, то вывести 0.
Помогите , пожалуйста. Бьюсь бьюсь над этой задачей и даже не могу понять как ее делать. 1 курс. Прошли самое элементарное. И такое же простое, значит, должно быть решение. Если кому не сложно, хотя бы подкиньте идей.
А то я теряюсь в догадках =((((((((
Решение задачи: «Дана строка. Если она представляет собой запись целого числа, то вывести 1»
textual
Листинг программы
int GetNumType(const char * p) {
int float_sep = 0; // количество найденных разделителей в строке
if (*p == '\0') return 0; // если пустая строка то сразу же выходим
for (;*p; ++p) { // для каждого символа в строке
if (*p >= '0' && *p <= '9') continue; // если текущий символ один из "0..9" то
// начинаем новую итерацию
if (*p != '.') return 0; // иначе если текущий символ не равен '.'
// то делаем вывод что строка не может быть
// представлена числом
++float_sep; // иначе увеличиваем кол-во разделителей
} // конец цикла for()
if (float_sep == 0) // если во всей строке мы не нашли не одного
return 1; // разделителя '.' то делаем вывод что число int
if (float_sep == 1 && p[-1] != '.')// если был найден только один разделитель
return 2; // и последний символ в строке не является разделителем
// то числов вещественное
return 0; // иначе нельзя преобразовать в число
}
Объяснение кода листинга программы
Список элементов:
- *p - указатель на текущий символ в строке
- '\0' - символ-маркер конца строки
- float_sep - переменная для подсчета разделителей в строке
- '0'..'9' - символы, которые могут встречаться в числе
- '.' - символ, обозначающий десятичную дробь в числе
- 0 - возвращаемое значение, если строка пустая
- 1 - возвращаемое значение, если в строке нет разделителей '.'
- 2 - возвращаемое значение, если в строке есть только один разделитель '.'
- 0 - возвращаемое значение, если строка не может быть преобразована в число