Как перевести символ в число си
Перейти к содержимому

Как перевести символ в число си

  • автор:

Как конвертировать символ в цифру?

Есть переменная типа string , в неё записывается строка, введённая пользователем с клавиатуры. Нужно посчитать сумму всех цифр в этой строке. Проблема в том, что не удаётся перевести символьную цифру в цифровую цифру. Пробовал юзать функцию atoi , но она выдаёт неправильный результат. Мой код:

string s; //code code. cin>>s; //code code. for(int i=0;i47 && (int)s[i] <58) < count++; sum+=atoi(&s[i]); >> 

Как перевести символ в число си

Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции strtol() и snprintf() .

Из строки в число. strtol

Функция strtol() преобразует строку в число типа long int . Функция определена в заголовочном файле stdlib.h и имеет следующий прототип:

long strtol(const char *restrict str, char **restrict str_end, int base);
  • str — строка с числом, которое надо преобразовать в числовой тип. Ключевое слово restrict указывает компилятору оптимизировать код и что никакой другой параметр не будет указывать на адрес данного параметра.
  • str_end — указатель на последний символ строки. Данный параметр можно игнорировать, передавая ему значение NULL
  • base — основание, система исчисления, в которую надо преобразовать данные (значение от 2 до 36).

Результатом функции является преобразованное число типа long .

Например, преобразуем строку в число в десятичной системе:

#include #include int main(void) < const char * str = "24 flowers"; long result = strtol(str, NULL, 10); printf("Result: %ld\n", result); // Result: 24 return 0; >

В примере выше второй параметр функции никак не использовался — мы ему передавали значение NULL , и функция нормально работала. Однако он может быть полезен, если нам надо получить остаток строки, которая идет после числа:

#include #include int main(void) < const char * str = "24 flowers"; char* str_end; long result = strtol(str, &str_end, 10); printf("Result: %ld\n", result); // Result: 24 printf("Rest of the string:%s\n", str_end); // Rest of the string: flowers return 0; >

Из числа в строку. snprintf

Функция snprintf() преобразует число в отформатированную строку. Функция определена в заголовочном файле stdio.h и имеет следующий прототип:

int snprintf(char *restrict str_buffer, size_t buffer_size, const char *restrict format, . );
  • str_buffer — строка, в которую помещается преобразованное число.
  • buffer_size — максимальное количество символов строки. Функция записывает в строку buffer-size — 1 байт и добавляет концевой нулевой байт
  • format — задает формат преобразования в строку.

При успешном преобразовании функция возвращает количество символов, записанных в строку (исключая концевой нулевой байт). При неудачном преобразовании возвращается отрицательное число.

#include int main(void) < int number = 354; char str [10]; snprintf(str, sizeof str, "%d", number); printf("Result: %s\n", str); // Result: 354 return 0; >

При этом строка форматирования может содержать множество параметров:

#include int main(void) < int count = 3; double price = 79.99; char str [50]; snprintf(str, sizeof str, "Count: %d \tPrice: %.2f", count, price); printf("%s\n", str); // Count: 3 Price: 79.99 return 0; >

Преобразовать строку в число (Си)

Задача: Написать и протестировать функцию my_stoi(n, str) , которая преобразует строку десятичных цифр в целое число. Решение: Пусть дана строка s = «46354» . Заведем целое число ( value ), изначально равное нулю. Последовательно обрабатываем символы строки, каждый раз умножаем value на 10 чтобы перейти к следующему десятичному разряду и добавляем очередную цифру. так для этого примера результаты будут формировать следующим образом:

Номер итерации цикла цифра value
1 4 0 *10 + 4 = 4
2 6 4*10 + 6 = 46
3 3 46*10 + 3 = 463
4 5 463*10+5 = 4635
5 4 4635*10 + 4 = 46354

Согласно прототипу, функция должна принимать число ( n ) и формировать строку ( str ). Однако, что если в строке есть символы, отличные от цифр? – При этом надо как-то вернуть ошибку в вызывающий код. Пусть функция возвращает единицу если число успешно распознано и ноль в противном случае. Для этого при обработке строки каждый символ проверяется на принадлежность диапазону [‘0’, ‘9’] . Кроме того, числа могут быть со знаком. Знаки – плюс и минус могут находиться только в начале строки. Эта ситуация обрабатывается – просматривается нулевой символ строки и если это знак – то счетчик символов увеличивается и переменная sign принимает значение ноль или единица. Если же sign хранит единицу – то перед возвратом результата функции полученное число умножается на ( -1 ). Исходный код:

#include #include int my_stoi(int* n, char *s) < const int size_s = strlen(s); int sign = 0; int i = 0; if (s[0] == '+') i = 1; if (s[0] == '-') < i = 1; sign = 1; >int value = 0; for (; i < size_s; ++i) < if (s[i] < '0' || s[i] >'9') < return 0; >int digit = s[i] - '0'; value = value * 10 + digit; > if (sign == 1) value = value * -1; *n = value; > int main() < char str[255]; int n; printf("enter number: "); scanf("%255[^\n]", str); if (my_stoi(&n, str) == 0) < printf("fail"); >else < printf("result by pro-prof.com: %d", n); >return 0; >

Просмотр 0 веток ответов

Преобразование из символа в число

Author24 — интернет-сервис помощи студентам

Помогите пожалуйста )
Писал с методички код, почему то выдаёт 0, можете плиз подсказать в чём проблема, или как ещё преобразовать можно, только желательно указатели используя,
Вообще вот всё условие: Создать стек для целых чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Числовое представление символа попадает в стек. Задачу решить с использованием механизма указателей.

Но стек сделан уже, тупо с этой фигнёй разобраться осталось )

94731 / 64177 / 26122

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *