Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




Существуют функции преобразования строки в целое число (функция 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, необходимой для ввода и промежуточного хранения вводимых значений в формате символьной строки.

Вывод строки

Существует два способа вывода символьной строки.

· использование многоцелевой функции printf() или fprintf();

· использование функции puts() или fputs().

Рассмотрим каждый из способов.

Вывод строки функциями printf() и fprintf()

Функция printf() (fprintf()) позволяет выводить различные типы данных из оперативной памяти на экран дисплея (на принтер или в файл), в том числе и символьную строку.

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

ü Внимание! Спецификатор %s требует в качестве соответствующего аргумента указания адреса выводимой строки.

Для вывода других типов переменных функция printf() использует не адреса, а значения. Использование адреса при выводе строки обусловлено тем, что функция выводит строку посимвольно. Функция принимает значение адреса и выводит все символы, начиная с символа в ячейке с этим адресом и заканчивая символом находящимся перед ‘\0’.

Если требуется вывести часть строки, то в спецификаторе необходимо указать количество выводимых символов (например, %10s).

Функция printf() не выводит каждую символьную строку с новой строки. Для перевода строки необходимо в управляющей строке указать символ новой строки ‘\n’.

Например,

char *name = “ЭВМ и вычислительные системы”;

int lec = 54, pr = 72, lab = 72;

printf(“\n Нагрузка по курсу \“%s\”: \n - лекции %d час;\n”

“ - практические занятия %d час;\n”

“ - лабораторные работы %d час.\n”, name, lec, pr, lab);

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

Нагрузка по курсу "ЭВМ и вычислительные системы":

- лекции 54 час;

- практические занятия 72 час;

- лабораторные работы 72 час.

В качестве аргументов функции printf() использованы: управляющая строка, указатель name, переменные lec, pr, lab. Таким образом, для вывода строки используется её начальный адрес, а для вывода целых переменных – их значения.

Функция fprintf() аналогична функции printf() за исключением того, что позволяет выводить данные не только на экран, но и на принтер или в файл.

Вывод строки функциями puts() и fputs()

Функция puts() (fputs()) позволяет выводить символьную строку из оперативной памяти на экран дисплея (на принтер или в файл).

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

int puts(char *s);

int fputs(char *s, FILE *fp);

Аргументом функции puts() является указатель на выводимую символьную строку.

Аргументами функции fputs() являются указатель на выводимую символьную строку и указатель на поток вывода. В качестве второго фактического параметра используются стандартные указатели на поток:

· stdout, предписывающий вывод на экран;

· stdprn, предписывающий вывод на принтер;

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

Функция puts() копирует символьную строку, на которую указывает формальный параметр – указатель s, на экран дисплея, добавляя в конце символ новой строки ‘\n’. Функция принимает значение адреса строки и выводит все символы, начиная с этого адреса до символа ‘\0’.

Добавление символа ‘\n’ предписывает перевод курсора на следующую строку экрана после вывода строки. Следовательно, функция puts() автоматически переводит строку после вывода.

При успешном завершении функция возвращает неотрицательное значение. В противном случае значение EOF (конец файла).

Функция fputs() аналогична функции puts() за исключением того, что позволяет выводить строку не только на экран, но и на принтер или в файл. Ещё одно отличие состоит в том, что функция fputs() не добавляет в конец выводимой строки символ ‘\n’.

ü Внимание! Функция fputs() не переводит строку после вывода.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных