Перейти к содержимому

Include string c что это

  • автор:

Include string c что это

Определяет шаблон basic_string класса контейнера и различные вспомогательные шаблоны.

Дополнительные сведения о basic_string классе см. в разделе basic_string «Класс»

Синтаксис

#include

Замечания

Язык C++ и библиотека Standard C++ поддерживают два типа строк:

  • Массивы символов, оканчивающиеся нулевым символов, часто называют строками C.
  • Объекты шаблона класса, тип basic_string , обрабатывающие все char аргументы шаблона, такие как.

Определения типов

Введите имя Description
string Тип, описывающий специализацию шаблона basic_string класса с элементами типа char в виде string .
wstring Тип, описывающий специализацию шаблона basic_string класса с элементами типа wchar_t в виде wstring .
u16string Тип, описывающий специализацию шаблона basic_string класса на основе элементов типа char16_t .
u32string Тип, описывающий специализацию шаблона basic_string класса на основе элементов типа char32_t .

Операторы

Operator Description
operator+ Сцепляет два строковых объекта.
operator!= Проверяет, что строковый объект слева от оператора не равен строковому объекту справа от оператора.
operator== Проверяет, равен ли строковый объект слева от оператора строковому объекту справа от оператора.
operator< Проверяет, что строковый объект слева от оператора меньше строкового объекта справа от оператора.
operator

Проверяет, что строковый объект слева от оператора меньше или равен строковому объекту справа от оператора.
operator

Функция шаблона, вставляющая строку в выходной поток.
operator> Проверяет, что строковый объект слева от оператора больше строкового объекта справа от оператора.
operator>= Проверяет, что строковый объект слева от оператора больше или равен строковому объекту справа от оператора.
operator>> Функция шаблона, извлекающая строку из входного потока.

Специализированные функции шаблонов

Имя Описание
hash Создает хэш строки.
swap Меняет местами массивы символов двух строк.
stod Преобразует последовательность символов в double .
stof Преобразует последовательность символов в float .
stoi Преобразует последовательность символов в int .
stold Преобразует последовательность символов в long double .
stoll Преобразует последовательность символов в long long .
stoul Преобразует последовательность символов в unsigned long .
stoull Преобразует последовательность символов в unsigned long long .
to_string Преобразует значение в string .
to_wstring Преобразует значение в расширенную строку.

Функции

Function Description
getline Шаблон string Извлеките строку по строке из входного потока.

Классы

Класс Description
basic_string Класса Шаблон класса, описывающий объекты, которые могут хранить последовательность произвольных символьных объектов.
char_traits Структура Шаблон класса, описывающий атрибуты, связанные с символом типа CharType

Специализации

Имя Описание
char_traits Структура Структура, которая является специализацией структуры char_traits шаблона для элемента типа char .
char_traits Структура Структура, которая является специализацией структуры char_traits шаблона для элемента типа wchar_t .
char_traits Структура Структура, которая является специализацией структуры char_traits шаблона для элемента типа char16_t .
char_traits Структура Структура, которая является специализацией структуры char_traits шаблона для элемента типа char32_t .

Include string c что это

Мы можем работать со строками в С++ в так называемом С-стиле как с массивами символов, которые оканчиваются на нулевой байт ‘0’. Однако, что если такой символ не будет найден или в процессе манипуляций со строкой будет удален, то дальшейшие действия с такой строкой могут иметь недетерминированный результат. По этой причине строки в С-стиле считаются небезопасными, и рекомендуется для хранения строк в C++ использовать тип std::string из модуля .

Объект типа string содержит последовательность символов типа char, которая может быть пустой. Например, определение пустой строки:

std::string message;

Также можно инициализировать или присвоить переменной string конкретную строку:

std::string message ; // или так std::string message2 = "Hello METANIT.COM!"; std::string message3("Hello METANIT.COM!");

В данном случае переменная message получит копию строкового литерала «Hello METANIT.COM!». В своем внутреннем представлении переменная message будет хранить массив символов, который также заканчивается на нулевой байт. Однако реализация типа string и предлагаемые им возможности делают работу с этим типом более безопасной.

И можно инициализировать объект string другим объектом string:

std::string hello; std::string message ; // message = "hello world" // или так // std::string message (hello); // std::string message = hello;

Мы можем вывести подобную строку на консоль:

#include #include int main() < std::string message ; std::cout 

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

Подобно массиву мы можем обращаться с помощью индексов к отдельным символам строки, получать и изменять их:

std::string hello ; char c ; // e hello[0]='M'; std::cout 

Поскольку объект string представляет последовательность символов, то эту последовательность можно перебрать с помощью цикла for. Например, подсчитаем, сколько раз в строке встречается буква "l":

#include #include int main() < unsigned count<>; // счетчик, сколько раз встречается символ std::string message< "Hello World">; for(const char c: message) < if(c == 'l') < count++; >> std::cout 

Чтение строки с консоли

Для считывания введенной строки с консоли, как и для считывания других значений, можно использовать объект std::cin :

#include #include int main() < std::string name; std::cout > name; std::cout

Input your name: Tom Your name: Tom

Однако если при данном способе ввода строка будет содержать подстроки, разделенные пробелом, то std::cin будет использовать только первую подстроку:

Input your name: Tom Smith Your name: Tom

Чтобы считать всю строку, применяется метод getline() :

#include #include int main()

Метод getline принимает два объекта - std::cin и переменную, в которую надо считать строку.

Input your name: Tom Smith Your name: Tom Smith

C++: Строки и std::string

"Hello, world!" — это набор последовательных символов, который называется строкой. В C++ мы используем строки для представления текста, такого как имена, адреса, слова и предложения.

В этом уроки мы познакомимся со строками в С++.

Особенность строк в С++

Строки в С++ не являются стандартным типом. Это составной тип, определенный в стандартной библиотеке, а не в ядре самого языка. Но строки достаточно просты и полезны, поэтому мы познакомимся с ними здесь, а в уроках про составные типы данных изучим их подробнее.

Чтобы использовать строки, нам нужно подключить заголовочный файл из стандартной библиотеки:

#include std::string domain < "code-basics" >; 

Тип string объявляется через пространство имен std . А строка в отличие от символа должна быть заключена в двойные кавычки.

Длина строки

Если мы хотим знать, сколько символов находится в std::string , мы можем спросить переменную std::string о ее длине. Синтаксис для этого отличается от того, что мы видели раньше:

#include #include int main() < std::string domain < "code-basics" >; std::cout

Вместо того, чтобы запрашивать длину строки как length(domain) , мы говорим domain.length() . Функция length() не является обычной автономной функцией. Это особый тип функции, которая принадлежит std::string и называется функцией-членом.

Позже мы расскажем о функциях-членах и о том, как написать собственные.

Эта программа создает следующий вывод:

Length domain name: 11

У функции length() есть алиас size() , который работает идентично:

int main() < std::string domain < "code-basics" >; std::cout
Length domain name: 11

std::string сложен и использует многие языковые функции, которые мы еще не рассмотрели. Но нам не нужно разбираться в этих сложностях, чтобы использовать std::string для простых задач, таких как простейший ввод и вывод строк.

Мы рекомендуем начать экспериментировать со строками уже сейчас, а дополнительные возможности строк мы рассмотрим позже.

Задание

Допишите программу, которая принимает в качестве аргумента командной строки доменное имя, сохраните его в переменную типа std::string и выведите на экран количество символов этого имени. Получить аргумент командной строки можно таким образом: argv[1]

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Include string c что это

Стандартная библиотека языка С++ предоставляет программистам строковый тип данных (избавляет от использования массивов символов char[ ]).

Мы будем использовать тип данных string наряду со стандартными встроенными типами данных. И вы на первый взгляд не будете замечать никаких различий, хотя на самом деле это абстрактный тип данных, созданный на основе объектно-ориентированных возможностей языка С++. Надеюсь со временем вы тоже сможете создавать АТД, которыми можно будет пользоваться так же удобно и свободно, как и классом string.

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

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

void main()
string name="Vitaly"; // объявление, определение, инициализация
string lastname="Domnenko";

name+="M."+lastname; // конкатенация с присваиванием (накапливающее присваивание)
cout >

Используя [ ] можно получить символ из любой позиции

char ch=name[5]; // символы нумеруются с нуля

Лексикографическое сравнение осуществляется с использованием операторов == < >= !=. При лексикографическом сравнении последовательно сравниваются коды символов строки. Те символы считаются "больше", чьи коды "больше"и наоборот.

Кодировка (кодовая таблица) - это однозначное соответствие между целым число (кодом) и символом. При этом символ - это буква, цифра и другие графические знаки. Кодировки обычно составляют так, что символы следуют в алфавитном порядке и символ 'а' имеет наименьший код, а символ 'z' наибольший. Таким образом, выполняя лексикографическое сравнение можно разместить слова (строки) в алфавитном порядке. Это справедливо и для символов кириллического алфавита. Но не всегда, т.к. существует кодировки, в которой кириллические символы располагаются не в алфавитном порядке. Это кодировка КОИ8, которая обычно используется в операционных системах UNIX. Если вы пишете программу для UNIX, то нужно помнить, что простое лексикографическое сравнение не даст ожидаемого результата и нужно усложнять программу.

В нашем случае (при программировании для DOS или Windows) используются кодировки CP866 и СP1251 лексикографическое сравнение справедливо и дает нужный результат.

Ну и операторы для ввода/вывода строковых переменных >>

Функция Описание
Конструкторы
string() конструктор по умолчанию, создает пустую строку
string(const char* p) преобразующий конструктор
string(const string& str, size t pos=0, size t n=npos) копирующий конструктор (npos обычно равен -1 и указывает, что память не была выделена)
string(const char* p, size_t n) копирует n символов, р является базовым адресом
string(char c, size t n=l) создает строку из n символов с
Перегруженные операторы
string& operator= (const string& s) оператор присваивания
string& operator+= (const string& s) добавляет строку
char operator[] (size t pos) const возвращает символ из позиции pos
char& operator[] (size t pos) возвращает ссылку на символ из позиции pos
Функции-члены
string& append(const string& s, size_t pos=0, size t n=npos); Добавляет n символов начиная от позиции pos
string& assign(const string& s, size_t pos=0, size_t n=npos); строковому объекту присваивается n символов, начиная от позиции pos
string& insert(size_t posl, const string& str, size_t pos2=0 , size_t n=npos); вставляет n символов, полученных из str, начиная с позиции pos2, в строку с позиции posl
string& remove(size_t pos=0 , size_t n=npos); Удаляются n символов из строки начиная с позиции pos
string& replace(posl, nl, str, pos2=0, n2=npos); в неявной строке начиная с позиции posl заменяет nl символов n2 символами из подстроки str с позиции pos2
string& replace(pos, n, p, n2); заменяет n символов в позиции pos используя char* p из n2 символов или char* p до завершающего нуля, или повторяя символ с rep раз
char get_at (pos) const; возвращает символ из позиции pos
void put_at (pos, c); помещает символ с в позицию pos
size_t length() const; возвращает длину строки
const char* c_str() const; преобразует строку в традиционное char* представление
const char* data() const; возвращает базовый адрес строкового представления
void resize(n, c); void resize(n); изменяет строку, делая ее длину равной п; в первой функции в качестве заполняющего символа выступает с, а во второй - символ eos () (end-of-string, конец строки)
void reserve(size_t res_arg);size_t reserve() const; выделяет память под строку; первая функция переустанавливает this; вторая возвращает закрытый член res - размер выделенного фрагмента
size_t copy(p, n, pos=0) const; п симолов строки, начиная с позиции pos, копируются в char* p
string substr(pos=0, n=pos) const; возвращается подстрока из п символов строки
int compare(const string& str, size_t pos=0, size_t n=npos) const; сравнивает п символов строки, начиная с позиции pos, со строкой str. Возвращается ноль, если строки равны; в противном случае возвращается положительное или отрицательное целое значение, показывающее, что неявная строка лексикографически больше или меньше чем строка str.
size_t find (const string& str, size_t pos=0) const; в строке начиная с позиции pos производится поиск строки str. Если она найдена, возвращается позиция, в которой она начинается; в противном случае возвращается позиция npos
size_t rfind(str, pos=npos) const; похоже на find (), но при поиске первого совпадения строка сканируется в обратном направлении
size_t find_first_of(str, pos=0) const; производится поиск первого вхождения str начиная с позиции pos
size_t find_last_of(str, pos=npos) const; аналогично, но в обратном направлении
size_t find_first_not_of(str, pos=0) const; производится поиск первого символа, который не соответствует ни одному из символов str начиная с позиции pos
size_t find_last_not_of(str, pos=npos) const; аналогично, но в обратном направлении
Пример работы со строками
///////////////////////////////////////////////////////////////////////////// // Прикладное программирование // Пример 2.1. Пример работы со сроками // // Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru // Университет ИТМО ///////////////////////////////////////////////////////////////////////////// #include // подключение библиотеки ввода-вывода #include // подключение библиотеки ввода-вывода в файл #include // подключение описания string using namespace std; // подключение стандартного пространства имен для использования библиотек ///////////////////////////////////////////////////////////////////////////// void main() < ifstream ifile("test.html"); // создание потока ввода из файла по его имени string data; // строка куда будут записаны данные // цикл будет выполняться до тех пор, пока не встретиться конец файла while(!ifile.eof()) < string sLine; getline(ifile, sLine, '\n'); // читаем строку из файла до символа конца строки data+=sLine; // записываем прочитанную строку в конец итоговой > size_t num_first=0; // номер символа, с которого будет происходить поиск // бесконечный цикл, выход из цикла - по оператору break while(true) < // находим номер символа, с которого начинается подстрока " // если такого текста не нашли - выход из цикла num_first=data.find(", num_first); if(num_first==string::npos) break; // находим номер символа, с которого начинается подстрока ">", начиная с символа под номером num_first+1 // если такого текста не нашли - выход из цикла size_t num_last=data.find(">", num_first+1); if(num_last==string::npos) break; // выделяем подстроку от "" string image_data=data.substr(num_first+1, num_last-num_first-1); // запоминаем символ, начиная с которого будем искать в следующий раз num_first=num_last+1; // ищем номер символа, с которого начинается подстрока "src="" // (для задания подстроки используем экранирующий символ) size_t num_first2=image_data.find("src=\""); // если такая подстрока была найдена if(num_first2!=string::npos) < // ищем закрывающую кавычку size_t num_last2=image_data.find("\"", num_first2+6); // если такая подстрока была найдена - выделяем в отдельную строку имя файла и выводим на экран if(num_last2!=string::npos) < string image_name=image_data.substr(num_first2+5, num_last2-num_first2-5); cout> >; > ///////////////////////////////////////////////////////////////////////////// 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *