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

Функції для роботи з рядками в C++
4.2 (84%) 10 голосів




функции strlen (), strcat (), strcpy (), strcmp () в C++

Після того, как мы с вами познакомились со рядками і символьними масивами в C ++, розглянемо найпоширеніші функції для роботи з ними. Урок буде повністю побудований на практиці. Мы будем писать собственные программы-аналоги для обработки строк и параллельно использовать стандартные функции библиотеки cstring (string.h – в старых версиях). Так вы примерно будете себе представлять, як вони влаштовані. Стандартними опціями бібліотеки cstring относятся:

  • strlen() – подсчитывает длину строки (количество символов без учета \0);
  • strcat() – объединяет строки;
  • strcpy() – копіює символи одного рядка в іншу;
  • strcmp() – порівнює між собою два рядки .

Это конечно не все функции, а только те, які ми розберемо в цій статті.

strlen() (от слова length – длина)

Наша программа, которая подсчитает количество символов в строке:

Для подсчёта символов в строке неопределённой длины (так как вводит её пользователь), мы применили цикл while – строки 13 – 17. Он перебирает все ячейки массива (все символы строки) поочередно, начиная с нулевой. Коли на якомусь етапі циклу зустрінеться осередок ourStr [amountOfSymbol], яка зберігає символ \0, цикл приостановит перебор символов и увеличение счётчика amountOfSymbol.

Так будет выглядеть код, з заміною нашої ділянки коду на функцію strlen():

Як бачите, этот код короче. В нем не пришлось объявлять дополнительные переменные и использовать цикл. В выходном потоке cout ми передали в функцію рядок – strlen(ourStr). Она посчитала длину этой строки и вернула в программу число. Как и в предыдущем коде-аналоге, символ \0 не включен в общее количество символов.

Результат буде і в першій програмі і в другій аналогічний:

функция strlen () в C++

strcat() (от слова concatenation – соединение)

Программа, яка в кінець одного рядка, дописывает вторую строку. Другими словами – объединяет две строки.

За коментарями в коді повинно бути все зрозуміло. Нижче напишемо програму для виконання таких же дій, но с использованием strcat(). В цю функцію ми передамо два аргументи (две строки) – strcat(someText1, someText2); . Функція додасть рядок someText2 до рядка someText1. При этом символ ' 0' в кінці someText1 буде перезаписан першим символом someText2. Так само вона додасть завершальний ' 0'

Реализация объединения двух строк, используя стандартную функцию, заняла одну строчку кода в программе – 14-я строка.

Результат:

strcat c++, strcat_s c++

На що слід звернути увагу і першому і в другому коді – размер первого символьного массива должен быть достаточным для помещения символов второго массива. Если размер окажется недостаточным – может произойти аварийное завершение программы, так як запис рядка вийде за межі пам'яті, которую занимает первый массив. Наприклад:

В этом случае, строковая константа “Учите С c нами!” не може бути записана в масив someText1. В нём недостаточно места, для такой операции.

Якщо ви використовуєте одну з останніх версій середовища розробки Microsoft Visual Studio, возможно возникновение следующей ошибки: “error C4996: ‘strcat’: This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.” Так происходит потому, що вже розроблена нова більш безпечна версія функції strcat – це strcat_s. Она заботится о том, чтобы не произошло переполнение буфера (символьного массива, в который производится запись второй строки). Среда предлагает вам использовать новую функцию, вместо устаревшей. Почитать больше об этом можно на сайте msdn. Подобная ошибка может появиться, якщо ви будете застосовувати функцію strcpy, о которой речь пойдет ниже.

strcpy() (от слова copy – копирование)

Реализуем копирование одной строки и её вставку на место другой строки.

Застосуємо стандартну функцію бібліотеки cstring:

Пробуйте компилировать и первую, и вторую программу. Увидите такой результат:

зЬгсру C ++

strcmp() (от слова compare – сравнение)

Эта функция устроена так: она сравнивает две Си-строки символ за символом. Если строки идентичны (и по символам и по их количеству) – функция возвращает в программу число 0. Якщо перший рядок довший другий – повертає в програму число 1, а если меньше, те -1. Число -1 повертається і тоді, когда длина строк равна, но символы строк не совпадают.

зЬгстр C ++ програма з strcmp():

зЬгстр C ++

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

На нашому сайті вже є можливість оформити підписку, чтобы получать уведомления о новых статьях. Чтобы подписаться – впишіть свій e-mail нижче.

Нові уроки з програмування:

25 думки про "Функції для роботи з рядками в C++

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

    , то в цьому випадку другий масив що не об'єднується з першим?

  2. Объясните, будь ласка, почему в примере с объединением строк
    int count1 = 0; // для индекса ячейки где хранится ‘\0первой строки
    while (someText1[count1] != 0)
    мы пишем “someText1[count1] != 0” а не “someText1[count1] != ‘\0′”?
    Мы же вроде бы ищем элемент окончания символьной строки ‘\0’? При чем здесь ноль?
    Хотя должен заметить, у меня а Коудблоксе работает и с нулем

  3. Уважаемый автор!
    По-моему, в первом примере сравнений строк пропущена директива препроцессору #include

залишити коментар

Код розміщуйте в тегах: <pre class="lang:C ++ декодуванням:true ">ВАШ КОД</заздалегідь>