- •Управление esc – последовательность (с примерами)
- •4. Определение констант и их характеристика (const,define,enum)
- •5. Форматные потоки в с. Функции fPrintf(), Fscanf(), и модификации (с примерами). Спецификаторы
- •7. Перегруженные операции.
- •8. Инструкция ветвления. (пример)
- •9. Инструкция switch()
- •10. Применение инструкции switch() для создания текстового меню.
- •11. Инструкция цикла.
- •12. Инструкция перехода.
- •13. Указатели. Операции над указателями. Косвенная адресация.
- •14. Ссылки (пример)
- •15. Статические числовые одномерные
- •16. Статические числовые двумерные массивы.
- •17. Динамическая память.
- •18. Выделение памяти под динамический одномерный и двумерный массив.
- •19. Алгоритм удаления и добавления данных в массив.
- •20. Глобальные, локальные, статические, внешние переменные.
- •21. Классы памяти.
- •22. Формальные и фактические параметры.
- •23. Функции.
- •24. Виды передачи параметров в функцию.
- •25.Функции и массивы
- •26. Функции с переменным числом параметров.
- •27. Шаблоны функции.
- •28.Рекурсии. Фреймы.
- •29. Функция Main()
- •30. Стеки.
- •31. Очереди.
- •33. Строки, как массив символов.
- •34. Функции ввода строковых переменных.
- •35.Основные функции обработки строковых переменных.
- •37. Функции преобразования типов.
- •38. Строки типа string.
- •40. Функции работы с памятью. Memcmp - сравнивает две области памяти
- •41. Структуры
- •42. Вложенные структуры.
- •43. Объединения (union)
- •44.Передача переменных определенных пользователем в функцию.
- •50. Функция определения конца файла.
- •51. Файловый поток.
- •52. Функции tellg и ftell
- •53. Установка файлового указателя
- •55. Обработка текстовых файлов.
- •56. Бинарный файл.
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);.