Цифры в число String-to-Int Как?

В программировании бывает нужно превратить символы цифр в полноценное число. К примеру, мне понадобилось считать файл такой структуры: «15, 58, 88, 95, ….». Как же преобразовать их? int()  — нет! В стандартных библиотеках C++ есть замечательная функция — atoi(). Она преобразовывает строку цифр-символов в число. Вот пример:

1
2
3
4
5
6
7
8
//....
char str[4];
str[0]='1'; str[1]='5'; //Вот наши числа
str[2]='\0' //Символ окончания строки
 
int number = 0; //Число типа - инт
number = atoi(str); //Преобразовываем строку в число
//.....

«\0» — Обязательный символ, он указывает на окончание строки. atoi() — преобразовывает числа диапазона Int, но есть ее аналоги для более больших чисел:

1
2
3
long atol(const char *str)
double atof(const char *str)
long long atoll(const char *str) (C99)

Кроме всего это есть еще несколько функций, более расширенных:

1
2
#include <stdlib.h> 
long int strtol(const char *start, char **end, int radix);

Здесь немного посложнее. Функция strtol() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром-указателем start, в значение типа long int и возвращает полученный результат. Основание системы счисления, в которой представлено преобразуемое число, определяется параметром radix. Значение radix может быть от 2 до 36.

Сначала в строке, с параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считывается само число. Считывание заканчивается, как только будет обнаружен символ, который не может быть частью длинного целого числа. К ним относятся пробелы, символы табуляции, знаки препинания и другие. А параметр end — должен указывать на «неиспользуемую» часть строки.
К примеру:

Значение start - "297 fields", а параметр end - будет указывать на пробел, предшествующий "fields".
//
Функция strtol вернет - "297"-Long int.

Код С++:

1
2
3
4
5
  char start[80], *end;
 
  printf("Введите число: ");
  gets(start);
  return strtol(start, &end, 10); //Оно!

И еще одно важное замечание — все символы должны быть в кодировке ASCII!.

В Wiring C (ArduinoIDE), с недавних пор появились свои функции.

string*.toInt() — очень простая в обращении функция. И весьма напоминает Pascal

1
2
3
4
5
6
7
String str;
char num[2] = {'1','5'};
//....
str = String(num[0]);
str += String(num[1]);
//....
int result = str.toInt(); //Результат

Кроме всего этого есть еще один способ — преобразование по таблице ASCII, которую вы могли видеть выше.
Тут простая подстановка кодов символов и последующая их обработка.

Вы можите оставить комментарий, или поставить трэкбек со своего сайта.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bug Report
Локализовано: шаблоны Wordpress