Перевод char в int работает только для положительных, не дробных чисел - C (СИ)
Формулировка задачи:
{ int i, Chislo=0; if(!StrLen(str)) return 0; for(i=0;i<StrLen(str);i++) Chislo=Chislo*10+(str[i]-'0'); return Chislo; }
С отрицательными разобрался.
Решение задачи: «Перевод char в int работает только для положительных, не дробных чисел»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h> long long convert(char *str) { long long i, Chislo = 0, minus = 0, count = 0; if (!strlen(str)) return 0; for (i = 0; i < strlen(str); i++) { if (str[i] == ' ') { count++; continue; } if (!minus) if (str[count] == '-') { minus++; continue; } if (str[i] < '0' || str[i] > '9') return 0; Chislo = Chislo * 10 + (str[i] - '0'); } if (minus) return -Chislo; return Chislo; } int main() { char str[]="1234567890123"; long long x; x=convert(str); printf ("%Ld\n", x); printf("%lu\n%Ld\n%Lu ", sizeof(long long), LLONG_MAX, ULLONG_MAX); return 0; }
Объяснение кода листинга программы
- long long i, Chislo = 0, minus = 0, count = 0; - Здесь объявляются четыре переменные типа long long: i, Chislo, minus и count. Значения переменных инициализируются нулями.
- if (!strlen(str)) - Если длина строки равна нулю, то выполняется код в блоке if и возвращается 0. Это предусмотрено для случая, когда в функцию convert передается пустая строка.
- for (i = 0; i < strlen(str); i++) - Здесь начинается цикл for, который будет выполняться столько раз, сколько символов в строке.
- if (str[i] == ' ') - Если текущий символ равен пробелу, то переменная count увеличивается на единицу и выполняется переход к следующему циклу.
- if (!minus) - Если переменная minus равна нулю, то проверяется, является ли текущий символ минусом. Если это так, то переменная minus увеличивается на единицу и выполняется переход к следующему циклу.
- if (str[i] < '0' || str[i] > '9') - Если текущий символ меньше '0' или больше '9', то функция convert возвращает 0, так как это не цифра.
- *Chislo = Chislo 10 + (str[i] - '0');** - Если текущий символ является цифрой, то он переводится в целое число и добавляется к переменной Chislo.
- if (minus) - Если переменная minus больше нуля, то значение переменной Chislo инвертируется, т.е. меняет знак на противоположный.
- return Chislo; - В конце функции convert возвращается значение переменной Chislo.
- char str[]=
1234567890123
; - В функции main объявляется строковая переменная str и инициализируется строкой1234567890123
. - long long x; - Объявляется переменная x типа long long.
- x=convert(str); - Функция convert вызывается с аргументом str и результат присваивается переменной x.
- printf (
%Ld\n
, x); - Выводится значение переменной x. - printf(
%lu\n%Ld\n%Lu
, sizeof(long long), LLONG_MAX, ULLONG_MAX); - Выводятся размеры типа long long и максимальные значения для этого типа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д