Strcmp си описание - IT Новости из мира ПК
Remkomplekty.ru

IT Новости из мира ПК
7 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Strcmp си описание

Strcpy(), strcat(), strlen(), strcmp()

Вызов функции strcpy() имеет вид strcpy(s1,s2).Содержимое строкиs2копируется встрокуs1.

Вызов функции strcat() имеет вид strcat(s1,s2).Функция strcat() присоединяет строку s2к строке s1 и помещает ее в массив, где находится строка s1, при этом строка s2 не изменяется. Нулевой байт, который завершал строку s1, будет заменен первым символом строки s2.

Пример использования данных функций

#include

#include

Void main(void)

char s1[20],s2[20];

strcpy(s1,”Hello, “);

strcpy(s2,”World!”);

Puts(s1);

Puts(s2);

Strcat(s1,s2);

Puts(s1);

Puts(s2);

Вызов функции strcmp() имеет вид strcmp(s1,s2).Функция strcmp() сравнивает строки s1 и s2и возвращает значение 0, если строки равны, то есть содержат одно и то же число одинаковых символов. Сравнение в лексикографическом смысле. Если s1 лексикографически (в смысле словаря) больше s2, то функция возвращает положительное значение, если меньше, то отрицательное значение.

Вызов функции strlen() имеет вид strlen(s).Функция возвращает длину строки s, при этом завершающий нулевой байт не учитывается.

#include

#include

Void main(void)

char s[80];

printf(”Введите строку: “);

Gets(s);

printf(“Строка n %s n имеет длину %d символов n”,s,strlen(s));

Функции из стандартной библиотеки для работы со строками

  1. char *strcat(char *dest, char *source) – конкатенация строк destи source.
  2. char *strncat(char *dest, char *source, unsigned maxlen) – присоединяет maxlenсимволов строки source к строке dest.
  3. char *strchr(char *source, char ch) – поиск в строке source первого вхождения символа ch.
  4. int strcmp(char *s1, char *s2) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.
  5. int strncmp(char *s1, char *s2, int maxlen) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.Сравниваются только первые maxlenсимволов.
  6. int stricmp(char *s1, char *s2) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.Не проверяются регистры букв.
  7. int strnicmp(char *s1, char *s2, int maxlen) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.Сравниваются только первые maxlenсимволов. Не проверяются регистры букв.
  8. char *strcpy(char *dest, char *source) – копирование строки sourceв строкуdest.
  9. char *strncpy(char *dest, char *source, unsigned maxlen) – копирование maxlenсимволов строки sourceв строкуdest.
  10. int strlen(char *s) –выдает число символов в строке без учета нулевого символа конца строки.
  11. char *strlwr(char *s)– переводит всю строку в нижний регистр (в строчные буквы)
  12. char *strupr(char *s)– переводит всю строку в верхний регистр (в прописные буквы)
  13. char *strdum(char *s) –вызывает функцию malloc и отводит место под копию s.
  14. char *strset(char *s, char ch) – заполняет всю строку символами ch.
  15. char *strnset(char *s, char ch, unsigned n) – заполняет первые nпозиций строки sсимволами ch.
  16. char *strrev(char *s)– инвертирует все буквы в строке s.
  17. int strcspn(char *s1, char *s2) –возвращает длину начального сегмента строкиs1,которая состоит исключительно из символов, не содержащихся в строкеs2.
  18. char *strpbrk(char *s1, char *s2) –просмотр строкиs1до тех пор, пока в ней не встретится символ, содержащийся вs2
  19. char *strrchr(char *s, char ch) – просматривает строку s до последнего появления в ней символа ch.
  20. int strspn(char *s1, char *s2) –возвращает длину начального сегмента строкиs1,который состоит исключительно из символов из строкиs2
  21. char *strstr(char *s1, char *s2) –возвращает указатель на позицию вхождения строкиs2в строкуs1.Если вхождения нет, то значение указателяNULL.
  22. char *strtok(char *s1, char *s2) – предполагается что строка s1 состоит из фрагментов, разделенных одно- или многосимвольными разделителями из строки s2. При первом обращении к strtok выдается указатель на первый символ первого фрагмента строки s1. последующие вызовы с заданием нуля вместо первого аргумента будут выдавать адреса дальнейших фрагментов из строки s1 до тех пор, пока фрагментов не останется.

Язык С допускает многомерные массивы, простейшей формой которых является двумерный массив

(two-dimensional array). Двумерный массив a[3][4] можно представить в виде таблицы

Функции обработки строк в Cи

В программе строки могут определяться следующим образом:

  • как строковые константы;
  • как массивы символов;
  • через указатель на символьный тип;
  • как массивы строк.

Кроме того, должно быть предусмотрено выделение памяти для хранения строки.

Любая последовательность символов, заключенная в двойные кавычки «» , рассматривается как строковая константа .

Для корректного вывода любая строка должна заканчиваться нуль-символом ‘’ , целочисленное значение которого равно 0. При объявлении строковой константы нуль-символ добавляется к ней автоматически. Так, последовательность символов, представляющая собой строковую константу, будет размещена в оперативной памяти компьютера, включая нулевой байт.

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

Читать еще:  Заполнение матрицы паскаль

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

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

При определении массива символов необходимо сообщить компилятору требуемый размер памяти.

Компилятор также может самостоятельно определить размер массива символов, если инициализация массива задана при объявлении строковой константой:

В этом случае имена m2 и m3 являются указателями на первые элементы массивов:

  • m2 эквивалентно &m2[0]
  • m2[0] эквивалентно ‘Г’
  • m2[1] эквивалентно ‘o’
  • m3 эквивалентно &m3[0]
  • m3[2] эквивалентно ‘x’

При объявлении массива символов и инициализации его строковой константой можно явно указать размер массива, но указанный размер массива должен быть больше, чем размер инициализирующей строковой константы:

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

В этом случае объявление массива переменной m4 может быть присвоен адрес массива:

Здесь m3 является константой-указателем. Нельзя изменить m3 , так как это означало бы изменение положения (адреса) массива в памяти, в отличие от m4 .

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

Массивы символьных строк

Иногда в программах возникает необходимость описание массива символьных строк . В этом случае можно использовать индекс строки для доступа к нескольким разным строкам.

В этом случае poet является массивом, состоящим из четырех указателей на символьные строки. Каждая строка символов представляет собой символьный массив, поэтому имеется четыре указателя на массивы. Указатель poet[0] ссылается на первую строку:
*poet[0] эквивалентно ‘П’,
*poet[l] эквивалентно ‘-‘.

Инициализация выполняется по правилам, определенным для массивов.
Тексты в кавычках эквивалентны инициализации каждой строки в массиве. Запятая разделяет соседние
последовательности.
Кроме того, можно явно задавать размер строк символов, используя описание, подобное такому:

Разница заключается в том, что такая форма задает «прямоугольный» массив, в котором все строки имеют одинаковую длину.

Свободный массив

Операции со строками

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

  • выделить блок оперативной памяти под массив;
  • проинициализировать строку.

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

Для ввода строки использована функция scanf() , причем введенная строка не может превышать 9 символов. Последний символ будет содержать ‘’ .

Функции ввода строк

Для ввода строки может использоваться функция scanf() . Однако функция scanf() предназначена скорее для получения слова, а не строки. Если применять формат «%s» для ввода, строка вводится до (но не включая) следующего пустого символа, которым может быть пробел, табуляция или перевод строки.

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

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

Функции вывода строк

Для вывода строк можно воспользоваться рассмотренной ранее функцией

или в сокращенном формате

Для вывода строк также может использоваться функция

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

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

Для ввода символов может использоваться функция

которая возвращает значение символа, введенного с клавиатуры. Указанная функция использовалась в рассмотренных ранее примерах для задержки окна консоли после выполнения программы до нажатия клавиши.

Функция вывода символов

Для вывода символов может использоваться функция

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

Пример Посчитать количество введенных символов во введенной строке.

Результат выполнения

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

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

Функция stricmp;

Пример

Функция strcmp

Сравнение строк

Функция strncat

Пример

strcat (string, » C++»);

Переменная string содержит строку «Turbo C++».

Функция strncat добавляет к содержимому целевой строки указанное количество символов из строки-источника.

Прототип функции strcat :

char *strncat(char *target, const char *source, size_t num);

Функция добавляет к содержимому целевой строки num символов из строки-источника и возвращает указатель на целевую строку.

char strl[81] = «Hello I am «;

char str2[41] = «Keith Thompson»;

strncat(strl, str2, 5);

Переменная strl теперь содержит строку «Hello I am Keith».

Пример использования функций getline, strlen и strcat в файле List7_4.cpp (исходный код программы STRING.CPP). Программа выполняет следующие задачи:

· Предлагает вам ввести строку; ввод не должен превышать 40 символов

· Предлагает вам ввести вторую строку; ввод не должен превышать 40 символов

· Выводит число символов, содержащихся в каждой строке

Читать еще:  Язык си приведение типов

· Присоединяет вторую строку к первой

· Выводит результат конкатенации

· Выводит длину объединенной строки

· Предлагает вам ввести символ для поиска

· Предлагает вам ввести символ для замены

· Выводит содержимое объединенной строки после замены символа

Поскольку строки являются массивами символов, вы не можете приме­нить операцию сравнения для проверки равенства двух строк. Библиотека функций STRING.H предлагает набор функций для сравнения строк. Эти функции сравнивают символы двух строк, используя для этого ASCII-коды символов. Это функции strcmp, stricmp, strncmp и strnicmp.

Вообще говоря, все функции сравнения работают одинаково: возвращают 0, если две строки совпали, отрицательную величину, если вторая строка больше по величине, и положительное значение, если большей оказалась первая строка.

Функция strcmp выполняет сравнение двух строк с учетом регистра сим­волов.

Прототип функции strcmp:

int strcmp(const char *strl, const char *str2);

Функция сравнивает строки strl и str2. Возвращает в качестве ре­зультата сравнения целую величину:

0 когда strl больше, чем str2.

char stringl[] = «Borland C++»;

char string2[] = «BORLAND C++»;

i = strcmp(string1, string2);

В последнем операторе переменной i присваивается положительное значение, так как string1 больше string2 (ASCII-коды символов в ниж­нем регистре больше ASCII-кодов символов в верхнем.)

Функция stricmp выполняет сравнение двух строк, не учитывая регистра символов.

Прототип функции stricmp:

int stricmp(const char *strl, const char *str2);

Функция сравнивает строки strl и str2, не делая различия между символами в нижнем и верхнем регистре. Возвращает в качестве ре­зультата сравнения целую величину:

Strcpy(), strcat(), strlen(), strcmp()

Вызов функции strcpy() имеет вид strcpy(s1,s2).Содержимое строкиs2копируется встрокуs1.

Вызов функции strcat() имеет вид strcat(s1,s2).Функция strcat() присоединяет строку s2к строке s1 и помещает ее в массив, где находится строка s1, при этом строка s2 не изменяется. Нулевой байт, который завершал строку s1, будет заменен первым символом строки s2.

Пример использования данных функций

#include

#include

Void main(void)

char s1[20],s2[20];

strcpy(s1,”Hello, “);

strcpy(s2,”World!”);

Puts(s1);

Puts(s2);

Strcat(s1,s2);

Puts(s1);

Puts(s2);

Вызов функции strcmp() имеет вид strcmp(s1,s2).Функция strcmp() сравнивает строки s1 и s2и возвращает значение 0, если строки равны, то есть содержат одно и то же число одинаковых символов. Сравнение в лексикографическом смысле. Если s1 лексикографически (в смысле словаря) больше s2, то функция возвращает положительное значение, если меньше, то отрицательное значение.

Вызов функции strlen() имеет вид strlen(s).Функция возвращает длину строки s, при этом завершающий нулевой байт не учитывается.

#include

#include

Void main(void)

char s[80];

printf(”Введите строку: “);

Gets(s);

printf(“Строка n %s n имеет длину %d символов n”,s,strlen(s));

Функции из стандартной библиотеки для работы со строками

  1. char *strcat(char *dest, char *source) – конкатенация строк destи source.
  2. char *strncat(char *dest, char *source, unsigned maxlen) – присоединяет maxlenсимволов строки source к строке dest.
  3. char *strchr(char *source, char ch) – поиск в строке source первого вхождения символа ch.
  4. int strcmp(char *s1, char *s2) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.
  5. int strncmp(char *s1, char *s2, int maxlen) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.Сравниваются только первые maxlenсимволов.
  6. int stricmp(char *s1, char *s2) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.Не проверяются регистры букв.
  7. int strnicmp(char *s1, char *s2, int maxlen) – возвращает 0, если s1 = = s2, возвращает 0, если s1>s2.Сравниваются только первые maxlenсимволов. Не проверяются регистры букв.
  8. char *strcpy(char *dest, char *source) – копирование строки sourceв строкуdest.
  9. char *strncpy(char *dest, char *source, unsigned maxlen) – копирование maxlenсимволов строки sourceв строкуdest.
  10. int strlen(char *s) –выдает число символов в строке без учета нулевого символа конца строки.
  11. char *strlwr(char *s)– переводит всю строку в нижний регистр (в строчные буквы)
  12. char *strupr(char *s)– переводит всю строку в верхний регистр (в прописные буквы)
  13. char *strdum(char *s) –вызывает функцию malloc и отводит место под копию s.
  14. char *strset(char *s, char ch) – заполняет всю строку символами ch.
  15. char *strnset(char *s, char ch, unsigned n) – заполняет первые nпозиций строки sсимволами ch.
  16. char *strrev(char *s)– инвертирует все буквы в строке s.
  17. int strcspn(char *s1, char *s2) –возвращает длину начального сегмента строкиs1,которая состоит исключительно из символов, не содержащихся в строкеs2.
  18. char *strpbrk(char *s1, char *s2) –просмотр строкиs1до тех пор, пока в ней не встретится символ, содержащийся вs2
  19. char *strrchr(char *s, char ch) – просматривает строку s до последнего появления в ней символа ch.
  20. int strspn(char *s1, char *s2) –возвращает длину начального сегмента строкиs1,который состоит исключительно из символов из строкиs2
  21. char *strstr(char *s1, char *s2) –возвращает указатель на позицию вхождения строкиs2в строкуs1.Если вхождения нет, то значение указателяNULL.
  22. char *strtok(char *s1, char *s2) – предполагается что строка s1 состоит из фрагментов, разделенных одно- или многосимвольными разделителями из строки s2. При первом обращении к strtok выдается указатель на первый символ первого фрагмента строки s1. последующие вызовы с заданием нуля вместо первого аргумента будут выдавать адреса дальнейших фрагментов из строки s1 до тех пор, пока фрагментов не останется.
Читать еще:  Yandex ru использует недействительный сертификат безопасности

Язык С допускает многомерные массивы, простейшей формой которых является двумерный массив

(two-dimensional array). Двумерный массив a[3][4] можно представить в виде таблицы

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

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

    • strlen() – подсчитывает длину строки (количество символов без учета );
    • strcpy() – копирует символы одной строки в другую;
  • strcmp() – сравнивает между собой две строки .

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

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

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

Навигация по записям

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

Навигация по комментариям

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

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

#include
#include
using namespace std;

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

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

Интересный баг в этом коде.
Скопировал, сделал два одинаковых текста “Вася, ты что, устал!” в char string_Array_1[] и char string_Array_2[] и проверил:
1. Пока строки одинаковы то всё GOOD.
2. Если первую строку сделать длиннее то получаю ” -1 ” (инвертировано).
3. Если первую строку сделать короче то получаю ” 1 ” (инвертировано).
Дальше интереснее.
4. Если в первой строке в слове ” устал ” букву ” у ” поменять на ” т ” то получаю ” -1 ”
5. Если в первой строке в слове ” устал ” букву ” у ” поменять на ” ф ” то получаю ” 1 ”
6. Если во второй строке в слове ” устал ” букву ” у ” поменять на ” т ” то получаю ” 1 ”
7. Если во второй строке в слове ” устал ” букву ” у ” поменять на ” т ” то получаю ” -1 ”
Слово ” устал ” я взял для примера. Букву ” у ” я менял на предыдущую и следующую в алфавите. Это работает с любой заменой букв ( ” а ” и ” я ” я не смог поменять).

Это не баг (как я думал). Это связано с кодировкой ASCII. Саму кодировку ASCII можно загуглить. Вот и выходит что “у” по этой кодировке больше “т” и меньше “ф”

Получается, что ‘?’ длиннее чем ‘!’
Это так.

Чем больше код символа в таблице ASCII тем “длиннее”.
“B” длиннее “А”, а “D” длиннее “B”.
Знаков препинания это тоже касается.
У “!” код 33, а у “?” код 63, значит ? > !

Да, немного разобравшись я понял (догадался) что тут идёт привязка к кодировке ASCII

>>Да, немного разобравшись я понял (догадался) что тут идёт привязка к >>кодировке ASCII
Никакой “привязки” к кодировке нет, сравниваются числа, для процессора не существует ни кодировок ни символов, а есть только числа и то в двоичной системе счисления!

0 0 голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
×
×