Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
s__ekzamen.docx
Скачиваний:
8
Добавлен:
18.12.2018
Размер:
113.34 Кб
Скачать

37. Функции преобразования типов.

При работе со строками одной из наиболее часто используемых операций является преобразование символьного представления числа в числовое. Например, если в программе выведена подсказка и ожидается ввод с клавиатуры значения зарплаты служащего, то в дальнейшем может потребоваться преобразовать строку ввода в значение с плавающей точкой. Для выполнения таких операций большинство Си-компиляторов предоставляет набор функций, выполняющих различные преобразования из ASCII-представления в числовое

Atof Преобразует символьную строку в значение типа float

atoi Преобразует символьную строку в значение типа int

atol Преобразует символьную строку в значение типа long int

strtod Преобразует символьную строку в значение типа double

strtol Преобразует символьную строку в значение типа long int

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

#include <stdio.h>

#include <stdlib.h>

void main(void)

{ int int_result;

float float_result;

long long_result;

int_result = atoi("1234");

float_result = atof("12345.678");

long_result = atol("1234567L");

printf("%d %f %ld\n", int_result, float_result, long_result);}

Правильный вариант инициализации выглядит так:

const char *str = s1.c_str(); // правильно

Преобразование числа в строку

Часто возникает необходимость иметь представление числа в виде строки (например, если есть функция, которая выводит заданную строку на экран, и нужно вывести число). Обычно для этого используют С-шные фунции snprintf(wsnprintf) или, что ещё хуже, sprintf(wsprintf). Это очень неудобно по нескольким причинам:

Нужно знать, сколько памяти необходимо выделить (пусть даже в виде массива char/wchar_t на стеке).

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

Нужно помнить формат спецификаторов.

В С++ есть красивое решение с использованием строковых потоков, которое я подсмотрел у Строуструпа:

std::stringstream s;

int a = 42;s << a;

std::string str = s.str();

Для получения С-строки можно просто вызвать метод c_str() класса std::string. Для wchar_t применяются классы std::wstringstream и std::wstring соответственно. При необходимости можно перегрузить оператор << для своего класса и преобразовывать какие-либо данные в строку таким же образом.

38. Строки типа string.

s1. substr (20, 10) + s5 + // substr () копирует 10 символов начиная с элемента 20

"with" + s3. substr (5, 100) + // substr () копирует 100 символов или остаток до конца, строки, начиная с элемента 5.

s1. substr (37, 1); // Функция substr () также может копировать отдельные символы

cout << quoteMe << endl; }

Анализ:

В первом аргументе функции substr () класса string передается начальная позиция, а во втором - длина подстроки в символах. У обоих аргументов имеются значения по умолчанию. Функция substr () с пустым списком аргументов возвращает копию всего объекта string: это удобный способ копирования строк в С++ .

cout << "Initial strings:\n";

cout << "str1: " << str1 << endl;

cout << "str2: " << str2 << "\n\n";

str1.insert(6, str2);

cout << str1 << "\n\n"

str1.erase(6, 9);

cout << str1 <<"\n\n";

str1.replace(7, 8, str2);

cout << str1 << endl;

return 0;}

Замена участка строки, указанного позицией и размером:

replace (size_type pos,size_type n1, const basic_string& s) - замена stl строкой;

replace (size_type pos, size_type n1, const charT* s) - замена C строкой;

Поиск указанного элемента

find (const string& str) const - поиск stl строки;

find (const string& str, size_type idx) const - поиск stl строки с указанной позиции;

find (const charT* s, size_type pos = 0) const - поиск C строки с указанной позиции;

find (const charT* s, size_type pos, size_type n) const - поиск подстроки с указанной позиции;

очищение множества – Clear().

Добавление в конец строки

append (const basic_string& s) - доб. stl строки;

append(const charT* s) - доб. C строки;

append(const charT* s, size_type n) - доб. части C строки;

append(size_type n, charT c ) - доб. n символов c;

Назначение данных строке

assign(const basic_string& s) - присв. stl строки;

assign (const basic_string& s,size_type pos, size_type n) - присв. части stl строки;

assign (const charT* s, size_type n) - присв. части C строки;

assign (size_type n, charT c) - присв. n символов c;

Удаление символов строки

erase (size_type pos=0,size_type n=npos) - удаляет n символов с указанной позиции;

erase (iterator p) - удаляет один символ в указанной позиции;

erase (iterator f, iterator l) - удаляет символы с позиции f по l.

39. sscanf и sprint

Описание функций C (Си) / C++ - sscanf

#include

int sscanf(buffer, format-string[, argument...]);

char *buffer; хранимые данные

char *format-string; строка управления форматом

Описание.

Функция sscanf читает данные из buffer в расположение, задаваемое arguments. Каждый argument должен быть указателем на переменную такого типа, которая соответствует типу, определенному в format-string.

Возвращаемое значение.

Функция sscanf возвращает количество успешно преобразованных и назначенных полей. В возвращаемом значении не содержатся прочитанные но не назначенные поля. Значение EOF возвращается при попытке считывания конца строки. Возвращаемое значение 0 означает, что нет назначенных полей.

Пример.

#include

char *tokenstring = "15 12 14...";

int i;

float fp;

char s[81];

char c;

sscanf(tokenstring, "%s", s);

sscanf(tokenstring, " %c", &c);

sscanf(tokenstring, "%d", &i);

sscanf(tokenstring, "%f", fp);.

Описание функций C (Си) / C++ - sprintf

int sprintf(buffer, format-string[, argument...]);

char *buffer; память для хранения вывода

char *format-string; строка управления форматом

Описание.

Функция sprintf форматирует и запоминает наборы символов и значений в buffer. Каждый аргумент argument (если он есть), преобразуется и выводится согласно соответствующей спецификации формата в format-string.

Format-string состоит из порядковых символов и имеет ту же самую форму и функцию, что аргумент format-string для функции printf. Смотрите функцию printf для описания format-string и аргументов.

Возвращаемое значение.

Функция sprintf возвращает количество символов, записанных

в buffer.

Пример.

char buffer[200];

int i, j;

double fp;

char *s = "computer";

char c;

j = sprintf(buffer, "%sn", s);

j + = sprintf(buffer+j, "%cn", c);

j + = sprintf(buffer+j, "%dn",i);

j + = sprintf(buffer+j, "%fn",fp);.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]