Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Способ 2.

Способ 1.

Очистка входного потока (буфера) после работы функции scanf() с помощью функции fflush(). Например,

scanf(“%d”, i); /*ввод целого числа*/

fflush(stdin); /*очистка входного потока от символа \n*/

Теперь можно использовать функцию gets().

Не использовать функции ввода scanf() и gets() в одной программе. Рекомендуется использовать только функцию gets(), которая более удобна для выполнения конкретных задач. Ввод численных данных осуществляется в виде символьной строки с последующим преобразованием в числовой формат.

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

Существуют функции преобразования строки в целое число (функция 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);

Методика ввода числовых данных с использованием функции gets()

Функции преобразования символьной строки в числовой формат позволяют отказаться от использования в программе функции scanf().

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

Например, фрагмент программы

char buf[20];

int d;

float r;

printf(“Введите значение переменной d:”)

gets(buf);

d = atoi(buf);

printf(“Введите значение переменной r:”)

gets(buf);

r = atof(buf);

позволяет последовательно ввести значения целой переменной d и вещественной переменной r, посредством символьной строки buf, необходимой для ввода и промежуточного хранения вводимых значений в формате символьной строки.

<== предыдущая лекция | следующая лекция ==>
Функция ввода символьной строки scanf( ) | Вывод строки
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 539; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.