Тип string visual studio
Working with strings. The string class. Class constructors. The functions assign() , append() , insert() , replace() , erase() , find() , rfind() , compare() , c_str() . Examples
Contents
- 1. What is the purpose of the ‘string’ class in C++ programs?
- 2. What modules (libraries) need to be connected to use the capabilities of the string class in MS Visual Studio C++?
- 3. How does it declare a variable of type ‘string’ ? Examples
- 4. What are the advantages and disadvantages of using the ‘string’ class in comparison with the char* type?
- 5. Which operators can be used with objects of class ‘string’ ?
- 6. Does the ‘string’ class contain a constructors?
- 7. Examples of initialization using constructors
- 8. Assigning of strings. The assign() function. Examples
- 9. Merging strings. The append() function. Example
- 10. Inserting characters in a string. Function insert() . Example
- 11. Replacing characters in a string. The replace() function. Example
- 12. Removing the specified number of characters from the string. The erase() function. Example
- 13. Search for a character in a string. The functions find() and rfind() . Examples
- 14. Comparing the parts of strings. The compare() function. Example
- 15. Getting a string with the end-of-line character ‘\0’ ( char* ). Function c_str() . Example
- Related topics
Search other websites:
1. What is the purpose of the ‘string’ class in C++ programs?
The string class is intended for working with strings of type char* , which represent a null terminated string. The string class was introduced as an alternative for working with strings of type char* . The strings that end with ‘\0’ are also called C-lines. Because string is a class, you can declare objects of this class.
2. What modules (libraries) need to be connected to use the capabilities of the string class in MS Visual Studio C++?
To use the capabilities of the string class in MS Visual Studio (C++), you need to include the library and the std namespace.
3. How does it declare a variable of type ‘string’ ? Examples
The declaration of a variable of type ‘string’ is carried out in exactly the same way as a regular variable. Possible variant of the declaration with simultaneous initialization.
4. What are the advantages and disadvantages of using the ‘string’ class in comparison with the char* type?
The creation of a new string type was due to the disadvantages of working with character strings, which the char* type demonstrated. In comparison with the type char* , the string type has the following main advantages:
- the ability to process strings with standard C++ operators ( = , + , = = , <> , etc.). As you know, when using char* , even the most simple operations with strings looked complicated and required writing excessive code;
- ensuring the best reliability (security) of the program code. For example, when copying strings, the ‘string’ type provides the appropriate actions that can occur if the source string is larger than the receiver string;
- providing the string as a separate data type. A ‘string’ type declaration as a string is the same for all variables in the program, which provides data consistency.
The main disadvantage of the ‘string’ type in comparison with the char* type is the slow processing speed. This is due to the fact that type ‘string’ is, in fact, a container class. And working with the class requires an additional implementation of the program code, which, in turn, takes extra time.
5. Which operators can be used with objects of class ‘string’ ?
The string class is convenient in that it makes it convenient to manipulate strings using standard (overloaded) operators. With objects of class string, you can use the following operations:
An example that demonstrates the use of the above operators
6. Does the ‘string’ class contain a constructors?
7. Examples of initialization using constructors
The following are examples of initializing variables of type ‘string’
8. Assigning of strings. The assign() function. Examples
To assign one row to another, you can apply one of two methods:
- use the assignment operator ‘=’ ;
- use the assign() function from the string class.
The assign() function has several overloaded implementations.
The first option is to call a function without parameters
In this case, a simple assignment of one row to the other occurs.
The second option allows you to copy the specified number of characters from the string:
- s – the object from which the original string is taken;
- st – the index (position) in the string from which the copying of num symbols begins;
- num – the number of characters to be copied from st ;
- size_type – ordinal type of data.
The third variant of the function assign() copies the first characters ( num ) of the string s to the calling object:
- s – a string that ends with the character ‘\0’ ;
- num – the number of characters that are copied to the calling object. The first num characters in s string are copied.
Below is an example with different implementations of the assign() function.
An example.
9. Merging strings. The append() function. Example
To merge strings, use the append() function. To merge strings can also use operation ‘+’ , for example:
However, the append() function is well suited if you want to add part of a string.
The function has the following implementation options:
In the first embodiment, the function receives a reference to the string object s , which is added to the calling object. In the second implementation, the function receives a pointer to a string of type const char* , which is terminated by the character ‘\0’ .
Example. Demonstration of the append() function.
10. Inserting characters in a string. Function insert() . Example
To insert one string at a given position of another string, you need to use the insert() function, which has several implementation options.
The first variant of the function allows you to insert completely the entire string s into the specified position of the start of the calling string (calling object):
The second variant of the function allows you to insert the part (the parameters insStart , num ) of the string s into the given start position of the calling string:
In the above functions:
- s – a string that is inserted into the calling string;
- start – position in the calling string from which to insert the string s;
- insStart – position in the string s from which the insertion occurs;
- num – the number of characters in the string s that are inserted from the insStart position.
11. Replacing characters in a string. The replace() function. Example
The replace() function replaces the characters in the calling string. The function has the following implementation options:
In the first variant, the calling string is replaced by the string s . It is possible to specify the position ( start ) and the number of characters ( num ) in the calling string, which must be replaced by the string s .
The second variant of the replace() function differs from the first one in that it allows you to replace the calling string with only a part of the string s . In this case, two additional parameters are specified: the replStart position and the number of characters in the string s that form the substring. This substring replaces the calling string.
Example. Demonstration of the function replace() .
12. Removing the specified number of characters from the string. The erase() function. Example
To delete characters from the calling string, use the erase() function:
- index – the index (position), from which you need to delete characters in the calling string;
- num – the number of characters that are deleted.
Example.
13. Search for a character in a string. The functions find() and rfind() . Examples
In the ‘string’ class, you can do a string search in a substring in two ways that differ in the direction of the search:
- by looking at the string from beginning to end with the find() function;
- by looking at the string from the end to the beginning with the rfind() function.
The prototype of find() is:
- s – the substring that is searched in the string, which calls this function. The function searches for the first occurrence of the string s . If a substring of s is found in the string that called this function, then the position of the first occurrence is returned. Otherwise, -1 is returned;
- start – the position from which the search is performed.
The prototype of rfind() is:
- s – the substring that is searched in the calling string. The search for a substring in a string is from the end to the beginning. If substring s is found in the calling string, then the function returns the position of the first occurrence. Otherwise, the function returns -1;
- npos – the position of the last character of the calling string;
- start – the position from which the search is performed.
Example 1. A snippet of code that uses the find() function
Example 2. Using the rfind() function
14. Comparing the parts of strings. The compare() function. Example
Since type string is a class, you can use the ‘= =’ operation to compare two strings with each other. If two lines are the same, then the result of the comparison is true . Otherwise, the result of the comparison will be false .
But if you want to compare part of one string with another, then the function compare() is provided for this. The prototype of compare() function:
- s – a string that is compared to the calling string;
- start – the position (index) in the string s, from which the line of characters for comparison begins;
- num – the number of characters in the string s that are compared with the calling string.
The function works as follows. If the calling string is less than the string s , then the function returns -1 (a negative value). If the calling string is greater than the string s , the function returns 1 (positive value). If two strings are equal, the function returns 0.
Example. Using the compare() function
15. Getting a string with the end-of-line character ‘\0’ ( char* ). Function c_str() . Example
To get a string that ends with a ‘\0’ character, use the function c_str() . Function prototype:
Example 1. Converting ‘string’ type to const char * .
Example 2.
The following shows how to convert a ‘ string ‘ type to the System::String type to display it in a control of the Label type for applications such as Windows Forms Application .
16. How to determine the length of a string of type string ? Function length()
To determine the number of characters in a string, the length() function is used without parameters.
Среда выполнения Windows и среда CLR представляют строки в виде объектов, управление выделяемой памятью которых осуществляется автоматически. Это значит, что в случае выхода строковой переменной за пределы области видимости или завершении работы приложения явно отменять память для строки не требуется. Чтобы указать, что управление временем существования строкового объекта должно осуществляться автоматически, следует объявить тип string с помощью модификатора дескриптор объекта (^).
Среда выполнения Windows
Архитектура среды выполнения Windows требует реализации типа данных String в пространстве имен Platform . Для удобства в Visual C++ также предусмотрен тип данных string , являющийся синонимом для Platform::String в пространстве имен default .
Синтаксис
Требования
Параметр компилятора: /ZW
Среда CLR
При компиляции с параметром /clr компилятор преобразует строковые литералы в строки типа String. Для сохранения обратной совместимости с существующим кодом у этого правила есть два исключения:
Обработка исключений. Если появляется строковый литерал, компилятор перехватывает его как строковый литерал.
Определение шаблона. Если строковый литерал передается в качестве аргумента шаблона, компилятор не преобразует его в String. Обратите внимание, что строковые литералы, переданные в качестве универсального аргумента, повышаются до String.
В компиляторе также есть встроенная поддержка трех операторов, которые можно переопределять для настройки их поведения:
System::String^ operator +( System::String, System::String);
System::String^ operator +( System::Object, System::String);
System::String^ operator +( System::String, System::Object);
После передачи String компилятор при необходимости упаковывает, а затем объединяет объект (с помощью ToString) со строкой.
Курсор ("^") означает, что объявленная переменная является дескриптором управляемого объекта C++/CLI.
Требования
Параметр компилятора: /clr
Примеры
В следующем примере кода демонстрируется объединение и сравнение строк.
В следующем примере показано, что предоставляемые компилятором операторы можно перегружать, и что компилятор будет искать перегрузку функции на основе типа String.
В следующем примере показано, что компилятор различает собственные строки и строки String.
Сравнение строки и System.String
Объявление и инициализация строк
Вы можете объявлять и инициализировать строки различными способами, как показано в следующем примере:
Новый оператор не используется для создания строкового объекта, за исключением инициализации строки с массивом символов.
Инициализируйте строку с константным значением Empty для создания нового объекта String, строка которого имеет нулевую длину. Представлением строкового литерала строки с нулевой длиной является "". Если вы инициализируете строки со значением Empty вместо NULL, вы снизите вероятность появления исключения NullReferenceException. Используйте статический метод IsNullOrEmpty(String), чтобы проверить значение строки, прежде чем пытаться получить к ней доступ.
Неизменность строк
Так как "изменение" строки на самом деле является созданием новой строки, создавать ссылки на строки следует с осторожностью. Если вы создадите ссылку на строку, а затем "измените" исходную строку, ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Это поведение проиллюстрировано в следующем коде:
Сведения о создании новых строк, основанных на таких изменениях, как операции поиска и замены исходной строки, см. в инструкциях по изменению содержимого строки.
Строковые литералы в кавычках
Строковые литералы начинаются и заканчиваются одним двойным символом кавычки ( " ) в одной строке. Кавычек строковые литералы лучше всего подходят для строк, которые помещаются в одну строку и не включают escape-последовательности. Строковый литерал в кавычках должен внедрять escape-символы, как показано в следующем примере:
Строковые литералы verbatim
Буквальные строковые литералы более удобны для многостроковых строк, строк, содержащих символы обратной косой черты или внедренных двойных кавычек. Строки verbatim сохраняют новые символы строк в составе текста строки. Используйте двойные кавычки, чтобы вставить кавычки в буквальной строке. В следующем примере показаны наиболее часто используемым буквальные строки:
Необработанные строковые литералы
- Начинается и заканчивается последовательностью не менее трех символов двойной кавычки ( """ ). Для поддержки строковых литералов, содержащих три повторяющихся символа кавычки, можно запустить и завершить последовательность более трех последовательных символов.
- Однострочные необработанные строковые литералы требуют символов открывающей и закрывающей кавычки в одной строке.
- Многострочный необработанные строковые литералы требуют как открывающих, так и закрывающих символов кавычки в собственной строке.
- В многострочных необработанных строковых литералах все пробелы слева от закрывающих кавычек удаляются.
В следующих примерах демонстрируются следующие правила:
В следующих примерах показаны ошибки компилятора, сообщаемые на основе следующих правил:
Первые два примера являются недопустимыми, так как для многострочный необработанных строковых литералом требуется последовательность открывающих и закрывающих кавычки в собственной строке. Третий пример недопустим, так как текст выходит из закрывающей последовательности кавычек.
При создании текста, включающего символы, требующие escape-последовательностей при использовании строковых литералов с кавычками или строковых литералов, следует учитывать необработанные строковые литералы. Необработанные строковые литералы будут проще читать, так как они будут более похожи на выходной текст. Например, рассмотрим следующий код, включающий строку форматированного JSON:
Сравните этот текст с эквивалентным текстом в нашем примере по сериализации JSON, которая не использует эту новую функцию.
Escape-последовательности строк
Escape-последовательность | Имя символа | Кодировка Юникод |
---|---|---|
\' | Одинарная кавычка | 0x0027 |
\" | Двойная кавычка | 0x0022 |
\\ | Обратная косая черта | 0x005C |
\0 | Null | 0x0000 |
\a | Предупреждение | 0x0007 |
\b | Backspace | 0x0008 |
\f | Перевод страницы | 0x000C |
\n | Новая строка | 0x000A |
\r | Возврат каретки | 0x000D |
\t | Горизонтальная табуляция | 0x0009 |
\v | Вертикальная табуляция | 0x000B |
\u | Escape-последовательность Юникода (UTF-16) | \uHHHH (диапазон: 0000–FFFF; пример: \u00E7 = "ç") |
\U | Escape-последовательность Юникода (UTF-32) | \U00HHHHHH (диапазон: 000000 – 10FFFF; пример: \U0001F47D = "👽") |
\x | Escape-последовательность Юникода аналогична "\u", она отличается только длиной переменной | \xH[H][H][H] (диапазон: 0–FFFF; пример: \x00E7 или \x0E7 или \xE7 = "ç") |
Если вы используете escape-последовательность \x с менее чем четырьмя шестнадцатеричными цифрами, то когда непосредственно следующие за ней символы также являются допустимыми шестнадцатеричными цифрами (т. е. 0–9, A–F и a–f), они будут интерпретированы как часть этой escape-последовательности. Например, \xA1 создает ""," — кодовую точку U+00A1. Однако если следующий символ — "A" или "a", то escape-последовательность будет интерпретирована как " \xA1A ਚ", которая является кодовой точкой U+0A1A. В таких случаях, чтобы избежать некорректной интерпретации, указывайте все четыре шестнадцатеричных знака (например, \x00A1 ).
Во время компиляции буквальные строки преобразуются в обычные строки с теми же escape-последовательностями. Поэтому, если вы просматриваете буквальную строку в окне контрольных значений отладчика, вы увидите escape-символы, добавленные компилятором, а не буквальную версию из исходного кода. Например, строка verbatim будет отображаться в окне контрольных @"C:\files.txt" значений как "C:\\files.txt".
Строки формата
Строка формата — это строка, содержимое которой можно определить динамически во время выполнения. Строки формата создаются путем внедрения интерполированных выражений или заполнителей внутри фигурных скобок в строке. Весь код внутри фигурных скобок ( <. >) будет преобразован в значение и выходные данные как отформатированная строка во время выполнения. Существует два способа создания строк формата: интерполяция строк и составное форматирование.
Интерполяция строк
Используйте интерполяцию для повышения удобства чтения и обслуживаемости кода. Интерполяция строк позволяет достичь тех же результатов, что и использование метода String.Format , но более простым и понятным способом.
Составное форматирование
String.Format использует заполнители в фигурных скобках, чтобы создать строку формата. В этом примере результат аналогичен выходным данным, получаемым с помощью метода интерполяции строк, описанного выше.
Подстроки
Подстрока — это последовательность символов, содержащихся в строке. Используйте метод Substring, чтобы создать новую строку из части исходной строки. Одно вхождение подстроки или несколько можно найти с помощью метода IndexOf. Используйте метод Replace, чтобы заменить все вхождения указанной подстроки новой строкой. Как и метод Substring , Replace фактически возвращает новую строку и не изменяет исходную строку. См. дополнительные сведения о поиске строк и изменении содержимого строк.
Доступ к отдельным символам
Используя нотацию массива со значением индекса, можно получить доступ только для чтения к отдельным символам, как показано в следующем примере:
String Если методы не предоставляют функциональные возможности, которые необходимо изменить отдельные символы в строке, можно использовать StringBuilder объект для изменения отдельных символов на месте, а затем создать новую строку для хранения результатов с помощью StringBuilder методов. В следующем примере предположим, что необходимо определенным образом изменить исходную строку, а затем сохранить результаты для дальнейшего использования:
Строки NULL и пустые строки
Пустая строка — это экземпляр объекта System.String, который содержит нуль символов. Пустые строки часто используются в различных сценариях программирования для представления пустого текстового поля. Методы можно вызывать для пустых строк, так как они допустимы System.String . Пустые строки инициализируются следующим образом:
В отличие от этого, строка NULL не ссылается на экземпляр System.String объекта, и любая попытка вызова метода в пустой строке NullReferenceExceptionвызывает . Но вы можете использовать строки NULL в операциях объединения и сравнения с другими строками. В следующих примерах показаны некоторые случаи, когда ссылка на пустую строку выполняется и не приводит к возникновению исключения:
Использование stringBuilder для быстрого создания строк
В этом примере объект StringBuilder используется для создания строки из набора числовых типов:
Строки, методы расширения и LINQ
Так как тип String использует IEnumerable , вы можете применять методы расширения, определенные для строк в классе Enumerable. Чтобы избежать визуального String загромождений, эти методы исключаются из IntelliSense для типа, но они доступны тем не менее. Можно также использовать выражения запроса LINQ в строках. Дополнительные сведения см. в документации по LINQ и строкам.
Класс string предназначен для работы со строками типа char* , которые представляют собой строку с завершающим нулем. Класс string был введенн как альтернативный вариант для работы со строками типа char* . Строки, которые завершаются символом ‘\0’ еще называются C-строками. Поскольку, string есть классом, то можно объявлять объекты этого класса.
2. Какие модули (библиотеки) нужно подключить, чтобы использовать возможности класса string в MS Visual Studio C++?
Чтобы использовать возможности класса string в MS Visual Studio (C++), нужно подключить библиотеку и пространство имен std .
3. Каким образом осуществляется объявление переменной типа string ? Примеры
Объявление переменной типа string осуществляется точно так же как и обычной переменной. Возможный вариант объявления с одновременной инициализацией.
4. Какие преимущества и недостатки дает использование класса string в сравнении с типом char* ?
Создание нового типа string было обусловлено недостатками работы с строками символов, который демонстрировал тип char* . В сравнении с типом char* тип string имеет следующие основные преимущества:
- возможность обработки строк стандартными операторами C++ ( = , + , = = , <> и т.п.). Как известно, при использовании типа char* даже наиболее простые операции со строками выглядели сложно и требовали написания чрезмерного программного кода;
- обеспечение лучшей надежности (безопасности) программного кода. Например, при копировании строк, тип string обеспечивает соответствующие действия, которые могут возникнуть в случае, если строка-источник имеет больший размер чем строка-приемник;
- обеспечение строки, как самостоятельного типа данных. Объявление типа string как строки есть единым для всех переменных в программе, которая обеспечивает непротиворечивость данных.
Основным недостатком типа string в сравнении с типом char* , есть замедленная скорость обработки данных. Это связано с тем, что тип string – это, фактически, контейнерный класс. А работа с классом требует дополнительной реализации программного кода, который, в свою очередь занимает лишнее время.
5. Какие операторы можно использовать с объектами класса string ?
Класс string есть удобен тем, что позволяет удобно манипулировать строками, используя стандартные (перегруженные) операторы.
С объектами класса string можно использовать нижеследующие операторы
Пример, который демонстрирует использование вышеприведенных операторов
6. Содержит ли класс string конструкторы?
Как и любой класс, класс string имеет ряд конструкторов. Основные из них следующие:
7. Примеры инициализации с помощью конструкторов
Ниже приведены примеры инициализации переменных типа string
8. Присваивание строк. Функция assign() . Примеры
Чтобы присвоить одну строку другой, можно применить один из двух методов:
- использовать оператор присваивания ‘=’ ;
- использовать функцию assign() из класса string .
Функция assign() имеет несколько перегруженных реализаций.
Первый вариант – это вызов функции без параметров
В этом случае происходит простое присваивание одной строки другой.
Второй вариант позволяет копировать заданное количество символов из строки:
- s – объект, из которого берется исходная строка;
- st – индекс (позиция) в строке, из которой начинается копирование num символов;
- num – количество символов, которые нужно скопировать из позиции st ;
- size_type – порядковый тип данных.
Третий вариант функции assign() копирует в вызывающий объект первые num символов строки s :
- s – строка, которая завершается символом ‘\0’ ;
- num – количество символов, которые копируются в вызывающий объект. Копируются первые num символов из строки s .
Ниже приведен пример с разными реализациями функции assign() .
Пример.
9. Объединение строк. Функция append() . Пример
Для объединения строк используется функция append() . Для добавления строк также можно использовать операцию ‘+’ , например:
Однако, функция append() хорошо подходит, если нужно добавлять часть строки.
Функция имеет следующие варианты реализации:
В первом варианте реализации функция получает ссылку на строчный объект s , который добавляется к вызывающему объекту. Во втором варианте реализации функция получает указатель на строку типа const char * , которая завершается символом ‘\0’ .
Пример. Демонстрация работы функции append() .
10. Вставка символов в строке. Функция insert() . Пример
Чтобы вставить одну строку в заданную позицию другой строки нужно использовать функцию insert() , которая имеет несколько вариантов реализации.
Первый вариант функции позволяет вставить полностью всю строку s в заданную позицию start вызывающей строки (вызывающего объекта):
Второй вариант функции позволяет вставить часть (параметры insStart , num ) строки s в заданную позицию start вызывающей строки:
В вышеприведенных функциях:
- s – строка, которая вставляется в вызывающую строку;
- start – позиция в вызывающей строке, из которой осуществляется вставка строки s ;
- insStart – позиция в строке s , из которой происходит вставка;
- num – количество символов в строке s , которые вставляются с позиции insStart .
11. Замена символов в строке. Функция replace() . Пример
Функция replace() выполняет замену символов в вызывающей строке. Функция имеет следующие варианты реализации:
В первом варианте реализации вызывающая строка заменяется строкой s . Есть возможность задать позицию ( start ) и количество символов ( num ) в вызывающей строке, которые нужно заменить строкой s .
Второй вариант функции replace() отличается от первого тем, что позволяет заменять вызывающую строку только частью строки s . В этом случае задаются два дополнительных параметра: позиция replStart и количество символов в строке s , которые образуют подстроку, которая заменяет вызывающую строку.
Пример. Демонстрация работы функции replace() .
12. Удаление заданного количества символов из строки. Функция erase() . Пример
Для удаления символов из вызывающей строки используется функция erase() :
- index – индекс (позиция), начиная из которой нужно удалить символы в вызывающей строке;
- num – количество символов, которые удаляются.
Пример.
13. Поиск символа в строке. Функции find() и rfind() . Примеры
В классе string поиск строки в подстроке можно делать двумя способами, которые отличаются направлением поиска:
- путем просмотра строки от начала до конца с помощью функции find() ;
- путем просмотра строки от конца к началу функцией rfind() .
Прототип функции find() имеет вид:
- s – подстрока, которая ищется в строке, что вызывает данную функцию. Функция осуществляет поиск первого вхождения строки s . Если подстрока s найдена в строке, что вызвала данную функцию, тогда возвращается позиция первого вхождения. В противном случае возвращается -1;
- start – позиция, из которой осуществляется поиск.
Прототип функции rfind() имеет вид:
- s – подстрока, которая ищется в вызывающей строке. Поиск подстроки в строке осуществляется от конца к началу. Если подстрока s найдена в вызывающей строке, то функция возвращает позицию первого вхождения. В противном случае функция возвращает -1;
- npos – позиция последнего символа вызывающей строки;
- start – позиция, из которой осуществляется поиск.
Пример 1. Фрагмент кода, который демонстрирует результат работы функции find()
Пример 2. Демонстрация работы функции rfind() .
14. Сравнение частей строк. Функция compare() . Пример
Поскольку тип string есть классом, то, чтобы сравнить две строки между собой можно использовать операцию ‘= =’ . Если две строки одинаковы, то результат сравнения будет true . В противном случае, результат сравнения будет false .
Но если нужно сравнить часть одной строки с другой, то для этого предусмотрена функция compare() .
Прототип функции compare() :
- s – строка, которая сравнивается с вызывающей строкой;
- start – позиция (индекс) в строке s , из которой начинается просмотр символов строки для сравнения;
- num – количество символов в строке s , которые сравниваются с вызывающей строкой.
Функция работает следующим образом. Если вызывающая строка меньше строки s , то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s , функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
Пример. Демонстрация работы функции compare() :
15. Получение строки с символом конца строки ‘\0’ ( char * ). Функция c_str() . Пример
Чтобы получить строку, которая заканчивается символом ‘\0’ используется функция c_str() .
Функция объявлена с модификатором const . Это означает, что функция не может изменять вызывающий объект (строку).
Пример 1. Преобразование типа string в const char * .
Пример 2.
Ниже продемонстрирован перевод строки из string в тип System::String для отображения его в элементе управления типа Label для приложений типа Windows Forms Application .
16. Как определить длину строки типа string ? Функция length()
Для определения количества символов в строке используется функция length() без параметров.
- любая переменная типа string представляет собой объект класса System.String ;
- тип string относится к ссылочным типам а не типам-значениям;
- строки типа string размещаются в «куче» (heap);
- к строкам типа string можно применять разнообразные методы, свойства и операции;
- строку типа string можно создавать с использованием оператора new и без использования этого оператора путем присваивания = ;
- содержимое объекта типа string изменить нельзя.
Пример строки-литерала типа string :
⇑
2. Способы создания экземпляра типа string
Как известно тип string есть псевдонимом класса System.String , который имеет несколько конструкторов. С помощью этих конструкторов можно создавать экземпляры класса string . Ниже приводится пример программы, в которой продемонстрировано создание экземпляров типа string разными способами.
Результат выполнения программы
⇑
3. Как в переменную типа string занести значение строки? Операция присваивания =
Для этого нужно использовать оператор присваивания ‘ = ‘.
Вариант 1. Присваивание после описания.
Вариант 2. Присваивание во время описания (начальная инициализация).
Вариант 3. Использование метода Copy() .
⇑
4. Как определить, равны ли две строки типа s tring между собой? Операция сравнения ==
Две строки можно сравнивать обычным оператором сравнения « == «.
Фрагмент кода, который определяет равенство (неравенство) двух строк:
⇑
5. Как сравнить две строки типа string в лексикографическом порядке? Метод CompareTo()
В этом случае можно использовать метод CompareTo() . Метод возвращает -1 , 0 или 1 .
В приведенном примере видно результат работы метода.
⇑
6. Как соединить две строки типа string ? Метод Concat() , операция +
Способ №1 — функция Concat() .
Способ № 2 — использование оператора «+».
⇑
7. Как скопировать одну строку типа s tring в другую? Метод Copy() , оператор присваивания =
Способ № 1 — оператор присваивания.
Способ №2 — метод Copy() .
⇑
8. Вставка подстроки начиная из заданного индекса. Метод Insert()
Для вставки подстроки используется функция Insert() . Функция принимает два параметра. Первый параметр – позиция индекса в строке, из которой делается вставка (начинается с 0 ). Второй параметр – текст самой строки.
Если задать неверный индекс за пределами диапазона, то будет сгенерирована исключительная ситуация.
⇑
9. Поиск и получение индекса первого вхождения подстроки в данную строку. Метод IndexOf()
Эта операция реализуется функцией IndexOf() . Если найдена подстрока в строке, то функция возвращает позицию первого вхождения. В другом случае функция возвращает -1 .
Функция имеет перегруженные варианты реализации.
⇑
10. Поиск и получение индекса последнего вхождения подстроки в данную строку функцией LastIndexOf() .
Функция имеет несколько перегруженных реализаций. Нумерация индекса последнего вхождения начинается с 0 .
⇑
11. Как определить длину строки типа string ? Свойство Length
Для определения длины строки (количество символов) типа string используется свойство Length.
⇑
12. Создание строки заданной ширины. Функции PadLeft() и PadRight()
Функции PadLeft() и PadRight() используются для создания форматированной строки, в которой позиции справа или слева заполняются пробелами.
⇑
13. Удаление заданного количества символов из строки. Функция Remove()
Функция Remove() имеет две реализации. В первой реализации функция имеет два параметра. Во второй – один параметр.
Пример 1. Реализация функции Remove() с двумя параметрами.
В данном примере функция Remove() получает два параметра. Первый параметр – позиция, из которой делается удаление. Второй параметр – количество удаленных символов.
Пример 2. Реализация с одним параметром.
В этом примере функция получает один параметр. Этот параметр определяет позицию из которой будет осуществлено удаление символов до конца строки.
то будет удалена вся строка.
Пример 3. Если нужно удалить последний символ в строке, то нужно написать такой код.
⇑
14. Замена символов в строке. Функция Replace()
Функция Replace() имеет два варианта реализации.
Первый вариант оперирует строками типа string . Второй вариант оперирует типом char .
Пример 1. Использование функции Replace() для замены одной строки на другую.
Пример 2. Использование функции Replace() для замены символа ‘0’ на символ ‘A’ .
⇑
15. Как в строке выделить подстроку. Функция Substring()
Функция Substring() имеет две реализации.
Вариант 1. Выделение подстроки с заданной позиции до конца строки.
⇑
16. Преобразование числовой строки типа string в целое число. Функция Parse()
Функция Parse() разрешает переводить строку, которая состоит из цифр, в целое число. Такая функция полезна если нужно получить число, которое было введено из клавиатуры и получено в виде строки. Например, ввод из элемента управления типа TextBox .
⇑
17. Преобразование целого числа в строку. Функция ToString()
Функция ToString() переводит целое число в его строчное представление. Например, такая функция полезная, если нужно вывести целое число на форму в элементе управления Label .
⇑
18. Преобразование строки string в число с плавающей запятой (вещественное число)
При преобразовании строки в соответствующее вещественное число, важно учитывать кодировку символов.
Если у вас установлена операционная система с кирилличной кодировкой и настроены соответствующие региональные стандарты, тогда символ ‘.’ может быть заменен на символ ‘,’ . Это связано с тем, что в странах, которые используют кириллицу как разделитель между целой и дробной частями, есть символ ‘ ,’ (запятая). А в англоязычных странах разделителем целой и дробовой частей есть символ ‘.’ (точка).
Символ-разделитель целой и дробной частей можно изменить в региональных настройках Windows.
Ниже приведен правильный вариант для ОС с кирилличной кодировкой:
⇑
19. Преобразование числа с плавающей запятой в string .
⇑
20. Перевод значения переменной логического типа bool в строку string
⇑
21. Постоянство строк. Как в строке типа string заменить символ в заданной позиции: s[index] = c
Нижеследующий фрагмент кода
вызовет ошибку компилятора
Значит, значение символа в заданной позиции строки типа string можно только прочитать.
Чтобы решить эту задачу можно использовать (как пример) один из предложенных способов.
Способ 1. Использование методов Substring() и String() . При использовании этого способа нужно выполнять проверку значения индекса на корректность. Если значение индекса выходит за пределы размерности строки, то возникнет исключительная ситуация.
Способ 2. Использование оператора цикла.
Способ 3. Использование методов Remove() и Insert() . В этом случае также нужно проверять индекс замены на корректность.
Читайте также: