Контакти

C команди для роботи з рядком. Бібліотеки та функції для роботи з рядками в сі. Операції над рядками

У цьому уроці ми з вами будемо обговорювати рядки в стилі Сі, можливо, ви вже бачили ці рядки у нас на сайті або в будь-якому іншому підручнику. Насправді, сі-рядки - це всього лише масиви символів але, зі своєю специфікою, таким чином, ми завжди знаємо, де кінець рядка. У цій статті ми розглянемо кілька функцій для роботи з рядками, наприклад, ви - копіювання, конкатенація, отримати довжину рядка.

Що таке рядки?

Відзначимо, що поряд з рядками в стилі С, які, по суті, є простими масивами, є також рядкові літерали, такі як цей "literal". Насправді, що рядки, що літерали - це просто набори символів, розташованих поруч в пам'яті комп'ютера. Але між масивами і літералами все таки є різниця, літерали можна змінювати і рядки - можна.

Будь-яка функція, яка приймає рядок в стилі С, також може приймати в якості параметра - літерал. У сі також є деякі сутності, які можуть виглядати як рядки, хоча, насправді, вони такими не є. Я зараз говорю про символи, вони укладені в одинарні лапки, ось приклад - "а", як бачите, це не рядок. Символ можна, в певному місці, привласнити рядку, але символи не можуть бути оброблені в вигляді рядка. Якщо ви пам'ятаєте, масиви працюють як покажчики, тому, якщо ви передаєте один символ в рядок, це буде вважатися помилкою.

З усього вище сказаного ви повинні були зрозуміти, що рядки - це масиви символів, а рядкові літерали - слова, оточені подвійними лапками. Ось ще один приклад литерала:

"Це статична рядок"

Ви ще не забули про специфіку рядків, яка згадувалася трохи вище? Так ось, Сі-рядки завжди повинні завершуватися нульовим символом, буквально - "\\ 0". Тому, щоб оголосити рядок, що складається з 49 букв, необхідно зарезервувати додаткову осередок під нульовий символ:

Char myString;

Як видно з прикладу, довжина масиву - 50 символів, 49 з яких займають рядок і один, останній займе нульовий символ. Важливо пам'ятати, що в кінці сі-рядків завжди повинен бути нуль-символ, точно так само як і в кінці кожного речення є точка. Хоча нуль символ не відображається при виведенні рядка, він все-одно займає місце в пам'яті. Тому, технічно, в масиві з п'ятдесяти елементів ви змогли б зберегти тільки 49 букв, тому що, останній символ потрібен для завершення рядка. Крім того, покажчики також можуть бути використані в якості рядка. Якщо ви читали статтю про, ви можете зробити щось подібне:

Char * myString; // покажчик типу char myString \u003d malloc (sizeof (* myString) * 64); // виділення пам'яті

У цьому прикладі ми виділили 64 осередки в пам'яті для масиву myString. Для вивільнення пам'яті скористайтеся функцією free ().

Free (myString);

Використання рядків

Рядки корисно використовувати тоді, коли вам необхідно виконувати різні операції з текстовою інформацією. Наприклад, якщо ви хочете, щоб користувач вводив ім'я в програму, ви повинні використовувати рядок. Використання функції scanf () для введення рядка - працює, але це може привести до переповнення буфера. Адже вхідний рядок може виявитися більше, ніж розмір рядка-буфера. Є кілька способів для вирішення цієї проблеми, але найпростіший спосіб - це використовувати, яка оголошена в заголовки .

Коли зчитує вхідні дані від користувача, вона буде читати всі символи, крім останнього. Після цього в кінець ліченої рядки, помістить нульовий термінатор. Функція fgets () буде cчітивать символи до тих пір, поки користувач не натисне Enter. Давайте подивимося приклад використання fgets ():

#include int main () (char myString; // довгий рядок printf ( "Введіть довгий рядок: "); Fgets (myString, 100, stdin); // зчитуємо з потоку введення рядок printf (" Ви ввели наступний рядок:% s ", myString); getchar ();)

Першим параметром для fgets () є рядок, другий параметр - розмір рядка і третій параметр - це покажчик на вхідний потік даних.

Результат роботи програми:

<ВВОД>...

Як бачите, з виведення програми, у вхідні рядок потрапив символ нового рядка - "\\ n". Так сталося через те, що fgets () вважала в рядок myString натискання кнопки Enter і завершила роботу. Це означає, що вам може знадобитися вручну видалити символ нового рядка. Один із способів зробити це, посимвольного перебір. Давайте доопрацюємо програму і видалимо символ нового рядка:

#include int main () (char myString; // довгий рядок printf ( "Введіть довгий рядок:"); fgets (myString, 100, stdin); // читав з потоку введення рядок int i; for (i \u003d 0; i< 100; i++) { if (myString[i] == "\n") { myString[i] = "\0"; break; } } printf("Вы ввели следующую строку: %s", myString); getchar(); }

Зверніть увагу, що якщо вхідний рядок містить менше 100 символів, то в рядок потрапить і символ нового рядка. Тому ми можемо видалити цей символ, використовуючи простий перебір. У програму ми додали цикл, в якому перебираємо символи рядка, рядки 12-19. І коли нам зустрічається символ нового рядка, ми його замінюємо нульовим символом, рядок 16. Результат роботи програми:

Введіть довгий рядок: Доля залишає свій відбиток Ви ввели наступний рядок: Доля залишає свій відбиток Для закриття даного вікна натисніть<ВВОД>...

На цьому поки все. У наступній статті я розповім вам про спеціальних функціях для роботи з рядками.

P.S .: Всі ми любимо дивитися різні відео-записи, але іноді буває так, що не завжди виходить відтворити деякі формати відео-файлів. Так ось, вирішити цю проблему можна за допомогою програми - xilisoft converter ultimate. Ви без зусиль зможете швидко переконвертувати відео з одного формату в інший. Крім того, ця програма вміє конвертувати ще й аудіо-файли, і анімовані зображення.

Невипадково тему про рядки я помістив в розділ "Масиви". Так як рядок це, по суті, масив символів. Ось приклад:

char str \u003d "Це просто рядок";

Цю ж рядок для більшого розуміння можна записати ось так:

char str \u003d ( "Е", "т", "о", "", "п", "р", "о", "с", "т", "о", "", "з", "т", "р", "о", "до", "а");

Тобто все той же масив, тільки що складається вже з символів. Тому працювати з ним можна, так само як і з цілочисельними масивами.

А тепер давайте спробуємо працювати з рядками в c. На вступних уроках ми розбирали, що символи відносяться до цілочисельним типам, тобто кожен символ має своє числове значення. Ось приклад і його рішення:

  1. потрібно перевести введене слово в верхній регістр:
  2. #include
    #include

    Int main ()
    {
    char str \u003d "sergey";

    str [i] - \u003d 32;
    }
    for (int i \u003d 0; str [i]! \u003d "\\ 0"; i ++) (
    printf ( "% c", str [i]);
    }
    getch ();

    Return 0;
    }

    для отримання коду числа просто скористайтеся в функції printf специфікатором% d. Так, і ще один важливий момент: Закінченням будь рядки є нуль-термінатор, який позначається спеціальним символом - "\0".

Ще одним способом вказівки рядка є оголошення її через char *. Ось приклад:

char * str \u003d "provod";

Тобто створюється покажчик на рядок, який розташовується десь в пам'яті.

А ось як можна вводити рядки через, нам уже рідний, опертаор scanf:

char str; scanf ( "% s", str);

Тут дві тонкощі:

  1. знак взяття адреси тут не потрібен, так як ім'я масиву, як ми вже знаємо, і є адресою
  2. Довжина введеної рядки не повинна перевищувати 15 символів, так як останнім обов'язково повинен бути нуль-термінатор. Причому компілятор сам заповнить цей символ після останнього введеного вашого символу.

Так як мова Сі є мовою структурним, то існують вже вбудовані функції для роботи з рядками і з символами. Для обробки рядків вам знадобиться підключити файл: ctype.h. Файл містить функції визначення регістра, формату символів. В принципі, все, що вам може знадобиться дізнатися про символ, можна виконати за допомогою функцій файлу ctype.h

Іноді вам може знадобитися перевести рядок в інший тип даних. Для розриву рядків в інші типи існує бібліотека stdlib. Ось її функції:

  1. int atoi (char * str)
  2. long atol (char * str)
  3. double atof (char * str)

Іноді ці функції дуже допомагають, наприклад, коли вам треба витягти з рядка рік або цифрове значення. Робота з рядками в c (сі) є дуже важливою темою, тому постарайтеся вникнути в цей урок.

оголошення рядків

Рядок в мові Сі є одновимірний масив символів, останнім елементом якої є символ кінця рядка - нуль (рядок, що завершується нулем, тобто NULL terminated string).

Оголошення змінної типу рядок в мові Сі можливо трьома способами, два з яких ініціалізують рядок під час оголошення.

Перший спосіб:

Оголошення масиву символів (не забудьте додати місце для завершального нуля):

Char s;

Другий спосіб:

Присвоїти строкової змінної початкове значення (при цьому довжину рядка компілятор може обчислити сам):

Char s \u003d "Приклад ініціалізації рядка";

Праворуч від знака присвоювання записана строкова константа. В кінці рядка автоматично додається нуль ( '\\ 0'). Константи символьних рядків поміщаються в клас статичної пам'яті.

Третій спосіб:

Неявне вказівку, що використовується масив. У лівій частині від знака присвоювання вказується покажчик на символ:

Char * s \u003d "Другий варіант ініціалізації";

Мінлива s буде покажчиком на те місце в оперативної пам'яті, Де розташовується строкова константа. У такій формі запису криється потенційна помилка, яка полягає в тому, що покажчик на символ часто називають рядком. Представлена \u200b\u200bнижче запис - це лише покажчик на символ, так як для розміщення рядка місце не передбачено:

Char * s;

Введення рядка зі стандартного пристрою вводу (клавіатури)

Для роботи з рядками є набір функцій. Для введення зі стандартного пристрою вводу (клавіатури) найчастіше використовуються бібліотечні функціями з модуля стандартного вводу-виводу: scanf і gets.

Для введення рядка за допомогою функції scanf, Використовує формат « % s» , Причому зверніть увагу на те, що перед ідентифікатором рядки не використовується знак адреси « & » , Так як одновимірний масив вже представлений покажчиком на його початок:

Scanf ( "% s", s);

функція gets () зчитує символи до тих пір, поки не досягне символу переходу на новий рядок. Функція приймає всі символи аж до символу перекладу рядка, але не включає його. До кінця рядка додається завершальний нуль ( '\\ 0'). функція gets () поміщає зчитану з клавіатури послідовність символів в параметр типу рядок і повертає покажчик на цей рядок (якщо операція завершилася успішно), або NULL (в разі помилки). У наведеному нижче прикладі при успішному завершенні операції, на екран буде виведено дві однакові рядки:

#include int main () (char s; char * p; p \u003d gets (s); printf ( "\\ n Введена рядок% s.", s); if (p) printf ( "\\ n Введена рядок% s.", p); return 0;)

Попутно зауважимо, що функція gets часто використовується для введення лю-Бих даних з клавіатури у вигляді рядка з метою подальшого перетворення функцією sscanf до потрібного формату або для попереднього аналізу даних, що вводяться, наприклад:

#include #include #include int main () (char s; int x, err; do (printf ( "\\ n Введіть ціле число -\u003e"); gets (s); err \u003d sscanf (s, "% d", & x); if (err ! \u003d 1) printf ( "\\ n Помилка введення.");) while (err! \u003d 1); printf ( "\\ n Введено ціле число -\u003e% d", x); return 0;)

Висновок рядків на стандартний пристрій виводу (екран монітора)

Для виведення рядків на стандартний пристрій виводу (екран монітора) можна використовувати дві функції printf і puts. У функції printf як формат передається «% s». Зручність використання цієї функції полягає в тому, що крім рядка можна відразу виводить дані інших типів. особливість функції puts полягає в тому, що після виведення рядка автоматично відбувається перехід на наступний рядок.

Функції для роботи з рядками

Для перетворення рядків у мові Сі передбачена бібліотека string. Кожна з функцій має свій формат запису (прототип).

Найбільш використовувані функції розглянуті в цій статті. - читати

Приклад програм (лістинг) працює з рядками

У програмі рядки можуть визначатися таким чином:

  • як рядкові константи;
  • як масиви символів;
  • через покажчик на символьний тип;
  • як масиви рядків.

Крім того, має бути передбачено виділення пам'яті для зберігання рядка.

Будь-яка послідовність символів, укладена в подвійні лапки «», розглядається як строкова константа.

Для коректного виведення будь-який рядок повинна закінчуватися нуль-символом "\\ 0", цілочисельне значення якого дорівнює 0. При оголошенні строкової константи нуль-символ додається до неї автоматично. Так, послідовність символів, що представляє собою строкову константу, буде розміщена в оперативній пам'яті комп'ютера, включаючи нульовий байт.

Під зберігання рядки виділяються послідовно йдуть осередки оперативної пам'яті. Таким чином, рядок являє собою масив символів. Для зберігання коду кожного символу рядка відводиться 1 байт.

Для приміщення в строкову константу деяких службових символів використовуються символьні комбінації. Так, якщо необхідно включити в рядок символ подвійної лапки, йому повинен передувати символ «зворотний слеш»: '\\ »'.

Строкові константи розміщуються в статичної пам'яті. Початкова адреса послідовності символів в подвійних лапках трактується як адреса рядки. Строкові константи часто використовуються для здійснення діалогу з користувачем в таких функціях, як printf ().

при визначенні масиву символів необхідно повідомити компілятору необхідний розмір пам'яті.

char m;

Компілятор також може самостійно визначити розмір масиву символів, якщо ініціалізація масиву задана при оголошенні строкової константою:

char m2 \u003d;
char m3 \u003d ( "Т", "і", "х", "і", "е", "", "д", "о", "л", "і", "н", "и", "", "п", "о", "л", "н", "и", "", "з", "в", "е", "ж", "е", "ї", "", "м", "г", "л", "о", "ї", "\\ 0"};

В цьому випадку імена m2 і m3 є покажчиками на перші елементи масивів:

  • m2 еквівалентно & m2
  • m2 еквівалентно 'Г'
  • m2 еквівалентно 'o'
  • m3 еквівалентно & m3
  • m3 еквівалентно 'x'

При оголошенні масиву символів і ініціалізації його строкової константою можна явно вказати розмір масиву, але вказаний розмір масиву повинен бути більше, ніж розмір инициализирующей строкової константи:

char m2 \u003d "Гірські вершини сплять у темряві ночі.";

Для завдання рядка можна використовувати покажчик на символьний тип.

char * m4;

У цьому випадку оголошення масиву змінної m4 може бути присвоєно адресу масиву:

m4 \u003d m3;
* M4 еквівалентно m3 \u003d "Т"
* (M4 + 1) еквівалентно m3 \u003d "і"

Тут m3 є константою-покажчиком. Не можна змінити m3, так як це означало б зміну положення (адреси) масиву в пам'яті, на відміну від m4.

Для покажчика можна використовувати операцію збільшення (переміщення на наступний символ):

Масиви символьних рядків

Іноді в програмах виникає необхідність опис масиву символьних рядків. В цьому випадку можна використовувати індекс рядка для доступу до кількох різних рядках.

char * poet \u003d ( "Загинув поет!", "- невільник честі -",
"Пал,", "обмовлений мовив ..."};

В цьому випадку poet є масивом, що складається з чотирьох покажчиків на символьні рядки. Кожен рядок символів є символьний масив, тому є чотири покажчика на масиви. Покажчик poet посилається на перший рядок:
* poet еквівалентно "П",
* Poet [l] еквівалентно "-" .

Ініціалізація виконується за правилами, визначеними для масивів.
Тексти в лапках еквівалентні ініціалізації кожного рядка в масиві. Кома розділяє сусідні
послідовності.
Крім того, можна явно задавати розмір рядків символів, використовуючи опис, подібне такому:

char poet;

Різниця полягає в тому, що така форма задає «прямокутний» масив, в якому всі рядки мають однакову довжину.

вільний масив

опис

сhar * poet;


визначає вільний масив, де довжина кожного рядка визначається тим дороговказом, який цей рядок инициализирует. Вільний масив не витрачає пам'ять марно.

Операції з рядками

Більшість операцій мови Сі, що мають справу з рядками, працює з покажчиками. Для розміщення в оперативній пам'яті рядки символів необхідно:

  • виділити блок оперативної пам'яті під масив;
  • проинициализировать рядок.

Для виділення пам'яті під зберігання рядки можуть використовуватися функції динамічного виділення пам'яті. При цьому необхідно враховувати необхідний розмір рядка:

char * name;
name \u003d (char *) malloc (10);
scanf ( "% 9s", name);

Для введення рядка використана функція scanf (), причому введений рядок не може перевищувати 9 символів. Останній символ буде містити "\\ 0".

Функції введення рядків

Для введення рядка може використовуватися функція scanf (). Однак функція scanf () призначена швидше для отримання слова, а не рядки. Якщо застосовувати формат "% s" для введення, рядок вводиться до (але не включаючи) наступного порожнього символу, яким може бути пробіл, табуляція або новий рядок.

Для введення рядка, включаючи пробіли, використовується функція

char * gets (char *);


або її еквівалент

char * gets_s (char *);

Як аргумент функції передається покажчик на рядок, в яку здійснюється введення. Функція просить користувача ввести рядок, яку вона поміщає в масив, поки користувач не натисне Enter.

Функції виводу рядків

Для виведення рядків можна скористатися розглянутої раніше функцією

printf ( "% s", str); // str - покажчик на рядок

або в скороченому форматі

printf (str);

Для виведення рядків також може використовуватися функція

int puts (char * s);

яка друкує рядок s і переводить курсор на новий рядок (на відміну від printf ()). Функція puts () також може використовуватися для виведення строкових констант, укладених в лапки.

Функція введення символів

Для введення символів може використовуватися функція

char getchar ();


яка повертає значення символу, введеного з клавіатури. Зазначена функція використовувалася в розглянутих раніше прикладах для затримки вікна консолі після виконання програми до натискання клавіші.

Функція виведення символів

Для виведення символів може використовуватися функція

char putchar (char);


яка повертає значення символу, що виводиться і виводить на екран символ, переданий в якості аргументу.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#include
#include
#include
int main () (
char s, sym;
int count, i;
system ( "chcp 1251");
system ( "cls");
printf ( "Введіть рядок:");
gets_s (s);
printf ( "Введіть символ:");
sym \u003d getchar ();
count \u003d 0;
for (i \u003d 0; s [i]! \u003d "\\ 0"; i ++)
{
if (s [i] \u003d\u003d sym)
count ++;
}
printf ( "У рядку \\ n");
puts (s); // Висновок рядка
printf ( "символ");
putchar (sym); // Висновок символу
printf ( "Зустрічається% d раз", Count);
getchar (); getchar ();
return 0;
}

результат виконання

Основні функції стандартної бібліотеки string.h

Основні функції стандартної бібліотеки string.h наведені в таблиці.

функція опис

char * strcat (char * s1, char * s2)

приєднує s2 до s1, повертає s1

char * strncat (char * s1, char * s2, int n)

приєднує не більше n символів s2 до s1, завершує рядок символом "\\ 0", повертає s1

char * strсpy (char * s1, char * s2)

копіює рядок s2 в рядок s1, включаючи "\\ 0", повертає s1
);
strncpy (m3, m1, 6); // Не додає "\\ 0" в кінці рядка
puts ( "Результат strncpy (m3, m1, 6)");
puts (m3);
strcpy (m3, m1);
puts ( "Результат strcpy (m3, m1)");
puts (m3);
puts ( "Результат strcmp (m3, m1) дорівнює");
printf ( "% d", strcmp (m3, m1));
strncat (m3, m2, 5);
puts ( "Результат strncat (m3, m2, 5)");
puts (m3);
strcat (m3, m2);
puts ( "Результат strcat (m3, m2)");
puts (m3);
puts ( "Кількість символів в рядку m1 одно strlen (m1):");
printf ( "% d \\ n", strlen (m1));
_strnset (m3, "f", 7);
puts ( "Результат strnset (m3," f ", 7)");
puts (m3);
_strset (m3, "k");
puts ( "Результат strnset (m3," k ")");
puts (m3);
getchar ();
return 0;
}

результат виконання

Рядки в C ++

Рядок - послідовність (масив) символів. Якщо у виразі зустрічається одиночний символ, він повинен бути укладений в одинарні лапки. При використанні у виразах рядок полягає в подвійні лапки.Ознакою кінця рядка є нульовий символ \0 . У C ++ рядки можна описати за допомогою символів (масив елементів типу char), В якому слід передбачити місце для зберігання ознаки кінця рядка.

Наприклад, опис рядки з 25 символів має виглядати так:

Можна описати і масив рядків:

Визначено масив з 3 рядків по 25 байт в кожній.

Для роботи з покажчиками можна використовувати ( char *). Адреса першого символу буде початковим значенням покажчика.

Розглянемо приклад оголошення і виведення рядків.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#include «stdafx.h»
#include
using namespace std;
int main ()
{
setlocale (LC_ALL, «Rus»);
// описуємо 3 рядки, s3- покажчик
char s2 [20], * s3, s4 [30];
cout<< «s2=» ; cin >\u003e S2; // введення рядка s2
cout<< «s2=» << s2<< endl;
// запис в s3 адреси рядка, де зберігається s4. Тепер в змінних
// (покажчиках) s3 і s4 зберігається значення одного і того ж адреси
s3 \u003d s4;
cout<< «s3=» ; cin >\u003e S3; // введення рядка s3
// вивід на екран рядків s3 і s4, хоча в результаті прісваівнія s3 \u003d s4;
// тепер s3 і s4 - це одне і теж
cout<< «s3=» << s3<< endl;
cout<< «s4=» << s4<< endl;
system ( «pause»);
return 0;
}

Результат роботи програми:

Але слід зазначити, що якщо користувач введе в одну змінну слова розділені пропуском, то програма буде працювати інакше:

Вся справа в тому, що функція cin вводить рядки до зустрівся пробілу. Більш універсальною функцією є getline.

cin.getline (char * s, int n);

Призначена для введення з клавіатури рядка s з пробілами, в рядку не повинно бути більше n символів. Отже, для коректного введення рядків, що містять пробіл, необхідно в нашій програмі замінити cin \u003e\u003e s на cin.getline (s, 80).

Операції над рядками

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

Для перетворення числа в рядок можна скористатися функцією sprintf з бібліотеки stdio.h.

Деякі функції роботи з рядками:

прототип функції опис функції
size_t strlen (const char * s) обчислює довжину рядка s в байтах.
char * strcat (char * dest, const char * scr) приєднує рядок src в кінець рядка dest, отримана терміну повертається в якості результату
char * strcpy (char * dest, const char * scr) копіює рядок scr в місце пам'яті, на яке вказує dest
char strncat (char * dest, const char * dest, size_t maxlen) приєднує рядок maxlen символів рядка src в кінець рядка dest
char * strncpy (char * dest, const char * scr, size_t maxlen) копіює maxlen символів рядка src в місце пам'яті, на яке вказує dest
int ctrcmp (const char * s1, const char * s2) порівнює два рядки в лексикографічному порядку з урахуванням відмінності великих і малих літер, функція повертає 0, якщо рядки збігаються, повертає - 1, якщо s1 розташовується в упорядкованому за алфавітом порядку раніше, ніж s2, і 1 - в протилежному випадку.
int strncmp (const char * s1, const char * s2, size_t maxlen) порівнює maxlen символів двох рядків в лексикографічному порядку, функція повертає 0, якщо рядки збігаються, повертає - 1, якщо s1 розташовується в упорядкованому за алфавітом порядку раніше, ніж s2, і 1 - в протилежному випадку.
double atof (const char * s) перетворює рядок у дійсне число, в разі невдалого перетворення повертається число 0
long atol (const char * s) перетворює рядок у довге ціле число, в разі невдалого перетворення повертається 0
char * strchr (const char * s, int c); повертає покажчик на перше входження символу c в рядок, на яку вказує s. якщо символ c не знайдений, повертається NULL
char * strupr (char * s) перетворює символи рядка, на яку вказує s, в символи верхнього регістру, після чого повертає її

Тип даних string

Крім роботи з рядками, як з масивом символів, в C ++ існує спеціальний тип даних string. Для введення змінних цього типу можна використовувати cin, Або спеціальну функцію getline.

getline (cin, s);

тут s - ім'я введеної перемінної типу string.

При описі змінної цього типу можна відразу присвоїти значення цієї змінної.

string var (s);

тут var - ім'я змінної, s - строкова константа. В результаті цього оператора створюється змінна var типу string, І в неї записується значення строкової константи s. наприклад,

string v ( «Hello»);

створюється рядок v, В яку записується значення Hello.

Доступ до i-му елементу рядка s типу string здійснюється стандартним чином s [i]. Над рядками типу string визначені наступні операції:

  • присвоювання, наприклад s1 \u003d s2;
  • об'єднання рядків (s1 + \u003d s2 або s1 \u003d s1 + s2) - додає до рядка s1 рядок s2, результат зберігатися в рядку s1, приклад об'єднання рядків:
  • порівняння рядків на основі лексикографічного порядку: s1 \u003d s2, s1! \u003d s2, s1 s2, s1<=s2, s1>\u003d S2 - результатом буде логічне значення;

При обробці рядків типу string можна використовувати такі функції:

  • s.substr (pos, length) - повертає підрядок з рядка s, Починаючи з номера pos довгою length символів;
  • s.empty () - повертає значення true, якщо рядок s порожня, false - в протилежному випадку;
  • s.insert (pos, s1) - вставляє рядок s1 в рядок s, Починаючи з позиції pos;
  • s.remove (pos, length) - видаляє з рядка s подстроку length довгою pos символів;
  • s.find (s1, pos) - повертає номер першого входження рядка s1 в рядок s, Пошук починається з номера pos, параметр pos може бути відсутнім, в цьому випадку пошук йде з початку рядка;
  • s.findfirst (s1, pos) - повертає номер першого входження будь-якого символу з рядка s1 в рядок s, Пошук починається з номера pos, Який може бути відсутнім.

Російська мова для рядків

Думаю ви вже помітили, що при виведенні російських букв, в консолі з'являються «ліві» символи. Для того щоб уникнути цього непорозуміння, необхідно скористатися сторонньою функцією CharToOemA. підключаємо бібліотеку windows.h, Вона потрібна для того, щоб наша функція могла перетворити рядки в іншу систему кодування. Також, нам знадобитися додатковий символьний масив. Вихідний код програми буде виглядати ось так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

#include «stdafx.h»
#include
#include
using namespace std;
int main ()
(Setlocale (LC_ALL, «Rus»);
char s [255] \u003d ( »Мене треба перетворити«} ;
char * pre \u003d new char [255];
CharToOemA (s, pre); // перетворюємо
cout<< s;
delete pre;
system ( «pause \u003e\u003e void»);
return 0;
}

Спосіб щойно описаний досить незручний. Але існує більш простий варіант вирішення «російської» проблеми. Як бачите, в програмі використовується функція setlocale (), замість цього зручніше вписати в головну функцію наступну конструкцію.



Сподобалася стаття? поділіться їй