Рядки в C ++
Рядок - послідовність (масив) символів. Ознакою кінця рядка є нульовий символ 0. У C ++ рядок можна описати за допомогою масиву символів (масив елементів типу char), в якому слід передбачити місце для зберігання ознаки кінця рядка.
Створення рядків char str 1 [10]; // Рядок - масив з 10 символів. Початкове значення символів не визначено. char str 2 [10] = "Hello"; / * Використовується ініціалізація (Не присвоювання!). У перші 5 символів записується "Hello", в 6 - нуль-термінатор, значення трьох останніх не визначено. * / char str 3 [10] = {'H', 'e', 'l', 'o', ' 0'}; // Еквівалентно попередньому. char str 4 [10] = "Very long line"; char str 5 [] = "Very long line"; / * Компілятор автоматично визначає довжину масиву (в нашому випадку 15) і ініціалізує його послідовністю символів. * / char * str 6; / * Рядок - покажчик на символ. У більшості випадків для її використання буде потрібно виділити пам'ять. * / str 6 = (char *) malloc (10); free (str 6);
Операції над рядками Рядок можна обробляти як масив символів, використовуючи алгоритми обробки масивів або за допомогою спеціальних функцій обробки рядків. Для роботи необхідно підключити бібліотеку cstring. Функції стандартної бібліотеки вводу / виводу
Довжина рядка strlen (ім'я рядка) визначає довжину зазначеного рядка, без урахування нульсимволу Копіювання рядків strcpy (s 1, s 2) виконує побайтное копіювання символів з рядка s 2 в рядок s 1 strncpy (s 1, s 2, n) виконує побайтне копіювання n символів з рядка s 2 в рядок s 1. повертає значення s 1 Конкатенація рядків strcat (s 1, s 2) об'єднує рядок s 2 з рядком s 1. Результат зберігається в s 1 strncat (s 1, s 2, n) об'єднує n символів рядка s 2 з рядком s 1. Результат зберігається в s 1 Порівняння рядків strcmp (s 1, s 2) порівнює рядок s 1 з рядком s 2 і повертає результат типу int: 0 якщо рядки еквівалентні, > 0 - якщо s 1 s 2 З урахуванням регістра strncmp (s 1, s 2) порівнює n символів рядка s 1 з рядком s 2 і повертає результат типу int: 0 -якщо рядки еквівалентні, > 0 - якщо s 1 s 2 stricmp (s 1, s 2) порівнює рядок s 1 з рядком s 2 і повертає результат типу int: 0 якщо рядки еквівалентні, > 0 - якщо s 1 s 2 Без урахування регістру strnicmp (s 1, s 2) порівнює n символів рядка s 1 з рядком s 2 і повертає результат типу int: 0 -якщо рядки еквівалентні, > 0 - якщо s 1 s 2
Обробка символів isalnum (c) повертає значення true, якщо з є буквою або цифрою, і false в інших випадках isalpha (c) повертає значення true, якщо з є буквою, і false в інших випадках isdigit (c) повертає значення true, якщо з є цифрою, і false в інших випадках islower (c) повертає значення true, якщо з є буквою нижнього регістра, і false в інших випадках isupper (c) повертає значення true, якщо з є буквою верхнього регістру, і false в інших випадках isspace (c) повертає значення true, якщо з є прогалиною, і false в інших випадках toupper (c) якщо символ с, є символом нижнього регістра, то функція повертає перетворений символ з у верхньому регістрі, інакше символ повертається без змін.
Функції пошуку strchr (s, c) пошук першого входження символу з в рядку s. У разі вдалого пошуку повертає вказівник на місце першого входження символу с. Якщо символ не знайдений, то повертається нуль. strcspn (s 1, s 2) визначає довжину початкового сегмента рядка s 1, що містить ті символи, які не входять в рядок s 2 strspn (s 1, s 2) повертає довжину початкового сегмента рядка s 1, який містить тільки ті символи, які входять в рядок s 2 strprbk (s 1, s 2) Повертає покажчик першого входження будь-якого символу рядка s 2 в рядку s 1
Функції перетворення atof (s 1) перетворить рядок s 1 в тип double atoi (s 1) перетворить рядок s 1 в тип int atol (s 1) перетворить рядок s 1 в тип long int
Тип даних string Крім роботи з рядками, як з масивом символів, в C ++ існує спеціальний тип даних string. Для введення змінних цього типу можна використовувати cin, або спеціальну функцію getline (cin, s); При описі змінної цього типу можна відразу присвоїти значення цієї змінної. string var (s); Тут var - ім'я змінної, s - строкова константа. У результаті цього оператора створюється змінна var типу string, і в неї записується значення строкової константи s. Наприклад, string v ( «Hello» ); Створюється рядок v, в яку записується значення Hello. Доступ до i-му елементу рядка s типу string здійснюється стандартним чином s [i]. Над рядками типу string визначені наступні операції: присвоювання, наприклад s 1 = s 2; об'єднання рядків (s 1 + = s 2 або s 1 = s 1 + s 2) - додає до рядка s 1 рядок s 2, результат зберігатися в рядку s 1 порівняння рядків на основі лексикографічного порядку: s 1 = s 2, s 1! = s 2, s 1 s 2, s 1 <= s 2, s 1> = s 2 - результатом буде логічне значення;
При обробці рядків типу string можна використовувати такі функції: s. substr (pos, length) - повертає підрядок з рядка s, починаючи з номера pos довгою length символів; s. empty () - повертає значення true, якщо рядок s порожня, false - в іншому випадку; s. insert (pos, s 1) - вставляє рядок s 1 у рядок s, починаючи з позиції pos; s. remove (pos, length) - видаляє з рядка s підрядок length довгою pos символів; s. find (s 1, pos) - повертає номер першого входження рядка s 1 у рядок s, пошук починається з номера pos, параметр pos може бути відсутнім, в цьому випадку пошук іде з початку рядка; s. findfirst (s 1, pos) - повертає номер першого входження будь -якого символу з рядка s 1 у рядок s, пошук починається з номера pos, який може бути відсутнім.
• Вся справа в тому, що функція cin введення рядка до стрічного пробілу. Більш універсальною функцією є getline. • cin. getline (char * s, int n); • Функція призначена для введення з клавіатури рядка s з пробілами, в рядку не повинно бути більше n символів. Отже, для коректного введення рядків, що містять пробіл, необхідно в нашій програмі замінити cin >> s на cin. getline (s, 80).