Рядки 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;

Результати наведеного вище прикладу показані нижче

Рядок скопійовано з повідомлення = ПОВІДОМЛЕННЯ

Об’єднайте один рядок в інший

strcat_s(string1, string2)

string2 буде додано до кінця string1
//declare 2 messages
char string1[20] = "Good";
char string2[] = " Morning";
//concatenate strings
strcat_s(string1, string2);
cout << string1 << endl;

Вихідні дані вище програми будуть:

Доброго ранку

Примітка: У вас має бути достатньо вільного місця в string1, щоб об’єднати його з string2.

Отримати довжину рядка

strlen(string)

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

Вихідного коду буде

Довжина струни 2 дорівнює 8

Рядок: “Ранок” зберігається із 7 символів та 8 символівth символ є нульовим символом - '\ 0'

Порівняйте два рядки

strcmp(string1, string2)

Ця функція повернеться 0, якщо рядки рівні; негативний значення, якщо рядок1 є менше ніж string2 та позитивний значення, якщо рядок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 порівнює рядки в лексикографічному (алфавітному) порядку. "Менше" для рядків означає, що "кішка" менше, ніж "собака", оскільки "кішка" стоїть за алфавітом перед "собакою".

Струнний клас

Інший спосіб представити рядки за допомогою класу, який надається стандартною бібліотекою C ++. Цей клас названий string і він має набагато більше функціональних можливостей, ніж масиви символів у C ++. Використання класу «рядок» у ваших програмах пропонує вам більше можливостей. Щоб використовувати рядки у вашій програмі, вам слід додати наступний оператор включення:

#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;

Нижче наведено вихідний код вище коду

гарний день

Перетворити рядок у постійний масив символів

Іноді корисно перетворити рядовий об'єкт на постійний масив char. Ви можете зробити це за допомогою 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 тип, який ви повинні включити wchar бібліотеки у вашій програмі, як показано нижче:
#include <wchar.h>

Бібліотека Wchar пропонує різні функції та константи для роботи з широкими символами. Є кілька констант в 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);

У наведеному вище випадку myMessage змінна will містить “Мій вік 20 років".

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

 Специфікатортип
 d, iДесяткове або ціле число. Аргументом є цілочисельне значення
 UБеззнакове ціле число
 OВосьмеричне ціле число
 x, XШістнадцяткове ціле число
 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);