Перевод 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 и максимальные значения для этого типа.