Основы программирования на С++ для начинающих

Функции для работы со строками в C++




функции 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:

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

strcpy c++

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

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

strcmp c++ Программа с strcmp():

strcmp c++

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

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

Рассылка новых уроков по программированию:

Функции для работы со строками в C++
4.6 (92.38%) 21 votes

41 thoughts on “Функции для работы со строками в C++

  1. while (true) // запускаем бесконечный цикл
    {
    someText1[count] = someText2[count]; // копируем посимвольно
    if (someText2[count] == ‘\0’) // если нашли \0 у второй строки
    {
    break; // прерываем цикл
    }
    count++;
    }
    Мне не понятно куда делась остальная часть строки “Сaйт purecodecpp.com!” ,
    если по идее должно получиться так: Основы С++pp.com.
    Мы копируем посимвольно меньшую строку в большую, так почему остаток someText1 удаляется?

    1. Потому, что мы копируем не меньшую в большую, а вторую в первую. И когда подойдет ‘\0’ во второй строке он тоже перезапишется в первый массив. Далее, когда будет считываться первый массив, то этот ноль и покажет конец строки и не важно, что там было за ним записано. Это будет конец строки.

  2. #include
    #include
    using namespace std;

    int main()
    {
    setlocale(LC_ALL, “rus”);

    char string_Array_1[] = “Вася, ты что, устал?”;
    char string_Array_2[] = “Вася, ты что, устал!”;

    cout << "Первая строка – \"" << string_Array_1 << "\"\n";
    cout << "Вторая строка – \"" << string_Array_2 << "\"\n";
    cout << "=====================================================\n\n";
    cout << "Если строки идентичны и по символам и по количеству, то: 0\n";
    cout << "Если первая строка длиннее второй, то: +1\n";
    cout << "Если первая строка короче второй, то: -1\n";
    cout << "Если длина строк равна, но символы не совпадают, то: -1\n";
    cout << "=====================================================\n\n";
    cout << "В приведенном случае получился ответ: " << strcmp(string_Array_1 , string_Array_2);
    cout << endl << endl;

    return 0;
    }

    Получатся:

    Первая строка – "Вася, ты что, устал?"
    Вторая строка – "Вася, ты что, устал!"
    ==========================================================

    Если строки идентичны и по символам и по количеству, то: 0
    Если первая строка длиннее второй, то: +1
    Если первая строка короче второй, то: -1
    Если длина строк равна, но символы не совпадают, то: -1
    ===========================================================

    В приведенном случае получился ответ: 1

    Не могу понять, почему 1, если в концах строк разные символы: ? и !

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *