Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции программирование.doc
Скачиваний:
38
Добавлен:
05.11.2018
Размер:
4.73 Mб
Скачать

Преобразование символьных строк

Существуют функции преобразования строки в целое число (функция atoi( )), длинное целое (функция atol( )), в число с плавающей точкой двойной точности (функция atof( )) или длинное число с плавающей точкой (функция atold( )). Рассмотрим подробней каждую из функций преобразования.

Функция atoi( )

Функция преобразует символьную строку в целочисленный формат. Прототип функция описан в заголовочном файле stdlib.h и имеет следующую структуру:

int atoi(char *s);

где s – указатель на преобразуемую символьную строку.

Функция atoi( ) преобразует строку, на которую указывает указатель s, в целое число типа int.

Функция распознает символы в строке в следующем порядке:

  • необязательная строка символов табуляции и пробелов;

  • необязательный знак;

  • строка цифр.

Число цифр, составляющих число, не должно превышать пяти, т.к. максимальное значение типа int – 32767.

Функция atoi( ) возвращает преобразованное значение входной строки. Если строка не может быть преобразована в число соответствующего типа (int), то возвращаемое значение равно 0. Например, результат преобразования строки «abcd» – 0.

Фрагмент программы

char *s1 = “1345”,

*s2 = “ -31”,

*s3 = “+97aBc”;

int i1, i2, i3;

i1 = atoi(s1);

i2 = atoi(s2);

i3 = atoi(s3);

printf(“i1 = %d i2 = %d i3 = %d”, i1, i2, i3);

позволит вывести численные значения переменных в следующем виде:

i1 = 1345 i2 = -31 i3 = 97

При обнаружении первого нераспознанного символа функция прекращает преобразование.

Функция atol( )

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

long atol(char *s);

Функция atol( ) преобразует строку, на которую указывает указатель s, в число типа long.

Функция atol( ) полностью аналогична функции atoi( ) за исключением того, что количество цифр в формате строки значительно больше (до 10).

Если строка задает число вне диапазона –2147483648 – 2147483647, то наступает переполнение и результат преобразования непредсказуем.

Например,

long m;

char *pstr = “98765432”;

m = atol(pstr);

printf(“строка = %s; число типа long = %ld\n”, pstr, m);

Результат работы программы:

строка = 98765432; число типа long = 98765432

Отметим некоторые особенности данной программы. Переменная m имеет тип long, потому что принимает возвращаемое функцией atol( ) значение типа long. Функция printf( ) имеет для второго аргумента спецификатор ld, т. к. выводимое значение длинного типа.

Функции atof( ) и atold( )

Функция atof( ) преобразует строку в число типа double.

Прототип функции описан в заголовочном файле stdlib.h и имеет следующую структуру:

double atof (char *s);

Функция преобразует строку, на которую указывает указатель s, в число типа double.

Функция распознает символьное представление числа с плавающей точкой, составленной из следующих компонентов:

  • необязательная строка знаков табуляции и пробелов;

  • необязательный знак;

  • строка цифр и необязательная десятичная точка, расположенная в любом месте этой строки;

  • необязательный символ e (Е)юбдлщш98, за которым следует необязательное целое со знаком или без него.

Символьная строка должна иметь следующий общий формат:

[пробелы][знак][dd…d][.][dd…d][e или E][знак][dd…d]

  • Внимание ! Обязательно наличие целой составляющей числа или точки с десятичной частью.

Например,

“28”, “.589”, “12.5”, “ -.06”, “62.E2”, “-0.2e-2”, “.1e+5”.

При обнаружении первого нераспознаваемого символа функция atof( ) прекращает преобразование.

Например, строка “12.5R-02” преобразуется в число 12.5.

Иначе говоря, любой непреобразуемый символ выступает как символ окончания строки ‘\0’.

При переполнении функция atof( ) возвращает отрицательное или положительное значение HUGE_VAL (огромное значение), что позволяет идентифицировать строку переполнения.

Переполнение наступает, когда преобразованное значение по модулю выходит из диапазона 1.7E-308 1.7E308.

Функция atold( ) аналогична функции atof( ) за исключением того, что она возвращает значение типа long double, для хранения которого отводится 10 байт, а диапазон возможного представления по модулю 3.4E-4932 1.1E4932.

Например,

double x;

float y;

char *pstr1= “123.45”;

char *pstr2= “1.7E20”;

x=atof(pstr1);

y=atof(pstr2;

printf(“Строка1 = %s число = %f. \n Строка2 = %s число = %lf. \n”, x, y);