Преобразовать строку цифр в число типа int - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите поправить код функции, не работает при работе с ведущим знаком '-'.
Описание задачи внутри..
Заранее спс)
P.S:Стандартными функциями пользоваться нельзя..
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/**
1.2. Написать функцию int stonum( char *str ), преобразующую строку цифр str
(возможен ведущий знак ‘+’ или ‘-‘) в число типа int.
**/
int stonum(char *str);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char *str=(char*)malloc(10*sizeof(char));
printf("Введите строку цифр: ");
gets(str);
printf("Число полученное в результате обработки: ");
printf("%d ",stonum(str));
return 0;
}
int stonum(char *str)
{
int n=0,k=1;
while (*str)
{
if (*str=='-')
k=-1;
if (*str=='+')
k=1;
else
n=10*n+*str-'0';
str++;
}
n*=k;
return n;
}Решение задачи: «Преобразовать строку цифр в число типа int»
textual
Листинг программы
int stonum(char *str)
{
int n=0,k=1;
while (*str)
{
if (*str=='-') k=-1;
if (*str=='+') k=1;
if ((*str >= '0') && (*str <= '9')) n=10*n+*str-'0';
str++;
}
n*=k;
return n;
}
Объяснение кода листинга программы
- Функция
stonumпринимает в качестве аргумента указатель на строку символовstr. - Переменная
nинициализируется значением 0 и используется для хранения результата преобразования строки в число. - Переменная
kинициализируется значением 1 и используется для хранения знака числа (положительного или отрицательного). - В цикле
whileпроисходит проход по каждому символу строки. - Если текущий символ равен '-', то значение переменной
kменяется на -1 (отрицательный знак). - Если текущий символ равен '+', то значение переменной
kменяется на 1 (положительный знак). - Если текущий символ является цифрой (больше или равен '0' и меньше '9'), то значение переменной
nувеличивается на 10 умноженное на текущее значениеnи вычитается значение ASCII кода символа '0' (для преобразования цифры в число). - После прохода по всем символам строки, значение переменной
nумножается на значение переменнойkи возвращается в качестве результата работы функции.