Как преобразовать число в строку в си
Нередко может возникнуть необходимость объединить строку с данными других типов, например, числами. Однако объединить строку мы можем только с другой строкой. Поэтому данные других типов вначале необходимо преобразовать в строку. Для преобразования в строку применяется функция std:to_string() , в которую передается преобразуемое значение:
#include #include int main() < unsigned age; std::string message< "Age: " + std::to_string(age)>; std::cout
Функции преобразования из строки в число
Нередко может вощникнуть противиположная задача — преобразовать строку в другой тип. Есть ряд функций, которые преобразуют строку в число определенного типа:
- stoi() : преобразует в тип int
- stol() : в long
- stoll() : в long long
- stoul() : в unsigned long
- stoull() : в unsigned long long
- stof() : в float
- stod() : в double
- stold() : в long double
Все они определены в модуле , работают однотипно и в качестве параметра принимают преобразуемую строку:
std::string str< "123" >; int n< std::stoi(str) >; // n == 123
Преобразование строки в указатель на символы
При необходимости можно преобразовать значение типа string в указатель на символы. Для преобразования в указатель на константную строку применяется метод c_str() :
#include #include int main() < std::string message ; const char* message_ptr = message.c_str(); // преобразуем в указатель std::cout
Для получения указателя также можно применять метод data() , который возвращает указатель на неконстантное значение, если объект string не является константой.
#include #include int main() < std::string message ; char* message_ptr = message.data(); // преобразуем в указатель std::cout
Как int (число) превратить в char (строку) в СИ
Но он выводит на экранчик отладочной платы(Explorer 16) полную белиберду. Библиотека #include
Отслеживать
задан 8 авг 2018 в 12:57
2,907 7 7 золотых знаков 44 44 серебряных знака 87 87 бронзовых знаков
atoi объявлен в
8 авг 2018 в 13:05
@acade поправил
8 авг 2018 в 13:12
А сколько там бит в байте? 256 — это 0 mod 256.
8 авг 2018 в 13:13
@bipll поправил
8 авг 2018 в 13:15
@timob256, stdlib.h тоже не поддерживает?
8 авг 2018 в 13:16
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Первый параметр: число которое необходимо преобразовать в строку (int)
Второй параметр: указатель на строку, куда необходимо записать преобразованное число.
Третий параметр: Система счисления, по которой происходит перевод числа
Использование функции itoa в вашем случае:
int adcResult = 333; // исходное число char adcString[15]; // буфер, в которую запишем число itoa(adcResult, adcString, 10); // вместо третьего параметра // можете написать нужное вам значение // например перевести в 16-ричную с.счисления
puts_lcd необходимо вызвать следующим образом:
puts_lcd(adcString, strlen(adcString));
Преобразовать строку в число (Си)
Задача: Написать и протестировать функцию 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 веток ответов
Преобразование вещественного числа в строку с заданной точностью
В продолжение темы о преобразовании целого числа в строку символов, рассмотрим вопрос преобразования в строку символов вещественного числа.
Перед началом преобразования представим число в нормированной форме, а затем переведем в цифру целую часть полученного числа. Из нормированного числа вычитаем целую часть и умножаем его на 10.
Функция принимает два аргумента:
- преобразуемое число в формате double ;
- количество знаков после запятой
Возвращаемое значение — указатель на полученную после преобразования строку.
Реализация на C++
#include
using namespace std;
// Функция преобразования числа в строку
char * DoubleToStr( do uble n, int tolerance)
char s[40], t, *temp;
do uble num;
int i, j;
i = tolerance;
j = 0;
num = n;
if (num <0) // определяем знак числа
num = -num;
s[j] = ‘-‘ ;
j++;
>
do < // преобразуем к нормированной форме (если не меньше 1)
num = num / 10;
i++;
> while (( int )num > 0);
num = num * 10;
while (i > 0)
t = ( int )num; // выделяем цифру, соответствующую целой части
s[j] = t | 0x30;
i—; j++;
if (i == tolerance) < // определяем положение десятичного разделителя
s[j] = ‘.’ ;
j++;
>
num = num — ( do uble )t; // вычитаем из числа целую часть
num = num * 10; // переходим к следующему разряду
>
s[j] = ‘\0’ ;
j++;
temp = new char [j]; // выделяем память под возвращаемую строку
for (i = 0; i temp = s ;
return (temp);
>
int main()
do uble a;
char *s;
cout cin >> a;
for ( int i = 0; i s = DoubleToStr(a, i);
cout >
cin.get(); cin.get();
return 0;
>

Результат выполнения