Строки C ++



строка

C ++ предоставляет три основных способа создания и использования строк в нашей программе:

  1. Использование массива элементов char
  2. . string класс
  3. . wchar_t для широких персонажей

Массив символов

Строка - это последовательность символов. char Тип данных используется для представления одного символа в C ++. Итак, если вы хотите использовать строку в своей программе, вы можете использовать массив символов. Объявление и определение строки с использованием массива символов аналогично объявлению и определению массива любого другого типа данных:

//define an array of chars with 10 elements
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

Любая строка заканчивается завершающим нулевым символом '\ 0'. Такое определение массива должно включать в качестве последнего элемента нулевой символ '\ 0'. В приведенном выше случае емкость массива равна 10, но мы использовали только 8 из них. Остальные два символа массива не будут определены.

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

char msg2[] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

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

Самый простой способ инициализировать массив символов - использовать строковый литерал в двойных кавычках, как показано ниже:

char msg3[] = "Message";

Вы можете выполнять некоторые базовые операции с массивами символов, используя функции из cstring библиотека, такая как:

Скопируйте одну строку в другую

strcpy_s(destination, source)

Ниже представлена ​​демонстрация использования strcpy_s
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };
char dest[20];
strcpy_s(dest, msg);
cout << "String copied from msg = " << dest << endl;

Результат приведенного выше примера показан ниже.

Строка скопирована из msg = MESSAGE

Соединить одну строку с другой

strcat_s(string1, string2)

строка2 будет добавлена ​​в конец строки1
//declare 2 messages
char string1[20] = "Good";
char string2[] = " Morning";
//concatenate strings
strcat_s(string1, string2);
cout << string1 << endl;

Вывод программы выше будет:

Доброе утро

Примечание: У вас должно быть достаточно свободного места в строке 1, чтобы объединить ее со строкой 2.

Получить длину строки

strlen(string)

cout << "Length of the string 2 is " << strlen(string2) << endl;

Вывод приведенного выше кода будет

Длина строки 2 - 8

Строка: «Утро» хранится в 7 знаках и 8th символ является нулевым символом - '\ 0'

Сравните две строки

strcmp(string1, string2)

Эта функция вернет 0, если строки равны; отрицательный значение, если строка1 Меньше чем строка2 и положительный значение, если строка1 большой чем строка2.
//declare two strings
char str1[100];
char str2[100];
//get user input of strings:
cout << "Please enter the first string\n";
cin >> str1;
cout << "Please enter the second string\n";
cin >> str2;
//compare strings
int result = strcmp(str1, str2);
if (result == 0)
{
	//strings are equals
	cout << str1 << " is equal to " << str2 << endl;
}
else
{
	if (result > 0)//str1 is greater
		cout << str1 << " is greater than " << str2 << endl;
	else//str2 is greater
		cout << str1 << " is less than " << str2 << endl;
}

Ниже приведен результат работы вышеуказанной программы.


Пожалуйста, введите первую строку
азбука
Пожалуйста, введите вторую строку
абд
abc меньше, чем abd

strcmp сравнивает строки в лексикографическом (алфавитном) порядке. «Меньше чем» для строк означает, что «кошка» меньше, чем «собака», потому что «кошка» идет в алфавитном порядке перед «собакой».

Класс String

Другой способ представления строк с помощью класса, предоставляемого стандартной библиотекой C ++. Этот класс называется string и он имеет гораздо больше функциональных возможностей, чем массивы символов в C ++. Использование класса «строка» в ваших программах дает вам больше возможностей. Чтобы использовать строки в вашей программе, вы должны добавить следующий оператор include:

#include <string>

После включения этого файла заголовка вы сможете использовать строковые объекты в своей программе. Вот пример объявления и определения строки:
string s1 = "Have a";
string s2 = " nice day";

Работа с строка занятие очень легкое.

Объединить строки

Для объединения в строки используйте знак плюса:

string s3 = s1 + s2;
cout << s3 << endl;

Ниже приведен вывод вышеуказанного кода

Приятного дня

Длина строки

Чтобы получить длину строки, например, «s3», вы можете использовать следующую функцию

s3.length()

Пример получения длины строки
cout << "Length of s3 is " << s3.length() << endl;

Ниже приведен вывод вышеуказанного кода

Длина s3 15

Скопируйте одну строку в другую

Чтобы скопировать одну строку в другую, просто используйте оператор присваивания

string s4 = s2;
cout << s4 << endl;

Ниже приведен вывод ОС над кодом

хороший день

Преобразовать строку в постоянный массив символов

Иногда бывает полезно преобразовать строковый объект в постоянный массив символов. Вы можете сделать это, используя c_str() функционировать, как показано ниже

const char* cstr = s3.c_str();

Проверьте, пуста ли строка или нет

Вы можете использовать empty() функция строки, чтобы определить, пуста строка или нет. Если строка пуста, функция пустой() вернется true в противном случае false

Ниже приведен код, показывающий, как использовать empty()

if (s4.empty())
	cout << "s4 is empty" << endl;
else
	cout << s4 << endl;

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

Широкий символ wchar_t

Широкий характер wchar_t - это тип данных, размер которого больше, чем у простого символьного типа данных. Этот тип данных занимает «2 или 4» байта. Этот тип предоставляет возможность использовать расширенные наборы символов для представления строк. В основном тип данных wchar_t используется при использовании международных языков, таких как китайский, японский. C ++ предоставляет встроенный тип данных для представления wchar_t широкие персонажи.

Объявление переменной для широких символов может быть выполнено следующим образом:

wchar_t wideString;

Чтобы использовать массив широких символов, вы должны объявить массив wchar_t, как показано ниже:
wchar_t wideString[100];

Работать с wchar_t типа вы должны включить чар библиотеки в вашей программе, как показано ниже:
#include <wchar.h>

Библиотека Wchar предлагает различные функции и константы для работы с широкими символами. Есть несколько констант в чар библиотека:
  • NULL - представляет константу нулевого указателя.
  • WCHAR_MAX - представляет максимальное значение whcar_t
  • WCHAR_MIN - представляет минимальное значение wchar_t.
  • WEOF - константа, используемая для обозначения конца файла.

Чтобы присвоить значение строке широких символов, вы должны использовать swprintfфункция:

int swprintf (wchar_t*  destinationString, size_t length, const wchar_t* formatString, ...);

Вот параметры:
  • Строка назначения - широкие символы, которые будут содержать отформатированные данные. Это может быть массив wchar_t или один широкий символ.
  • Длина - количество записанных символов. Не забудьте увеличить длину строки на единицу для нулевого символа в конце строки.
  • Строка формата - Строка, используемая для записи данных в соответствии с форматом.
  • … - Параметры, которые будут использоваться со строкой формата.

В случае успеха возвращаемое значение этой функции - количество записанных символов.

Ниже приведен пример

swprintf(wideString, 6, L"HELLO");

В приведенном выше случае форматная строка представляет собой простую строку, а символ «L» перед «HELLO» используется для преобразования строки в const wchar_t*

В следующем примере показано, как использовать строку формата со спецификаторами формата:

swprintf(myMessage, 13, L"My age is %d ", 20);

В приведенном выше случае мое сообщение переменная будет содержать «Мой возраст 20».

Список некоторых спецификаторов формата представлен в следующей таблице:

 СпецификаторТип
 д, яДесятичное или целое число. Аргумент - целое число.
 UБеззнаковое целое
 OВосьмеричное целое число
 х, хШестнадцатеричное целое число
 FЗначение с плавающей запятой
 EНаучная плавающая точка
 cХарактер
 sстрока
 nУказатель на int

Чтобы напечатать широкие символы, мы должны использовать wpritnf функция:

int wprintf (const wchar_t* formatString, ...);

wprintf записывает широкие символы в стандартный вывод в указанном формате. Например, мы можем напечатать значение двух строк широких символов, используемых в приведенном выше коде, как показано ниже.
wprintf(wideString);
wprintf(myMessage);

Чтобы записать широкие символы в стандартный вывод, вы можете использовать wcout объект так же, как вы использовали cout для вывода данных.
wcout << "Use of wcout " << wideString << endl;

Чтобы прочитать широкий символ из консоли, вы должны использовать wcin вместо cin
wchar_t name[50];
cout << "Enter your name" << endl;
wcin >> name;
cout << endl << "Your name is ";
wprintf(L"%s", name);