Функция strstr в си

Функция strstr в си

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

определяет длину указанной строки, без учёта нуль-символа

выполняет побайтное копирование символов из строки s2 в строку s1

выполняет побайтное копирование n символов из строки s2 в строку s1. возвращает значения s1

объединяет строку s2 со строкой s1. Результат сохраняется в s1

объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1

сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 С учётом регистра

сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 С учётом регистра

сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 Без учёта регистра

сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 Без учёта регистра

возвращает значение true, если с является буквой или цифрой, и false в других случаях

возвращает значение true, если с является буквой, и false в других случаях

возвращает значение true, если с является цифрой, и false в других случаях

возвращает значение true, если с является буквой нижнего регистра, и false в других случаях

возвращает значение true, если с является буквой верхнего регистра, и false в других случаях

возвращает значение true, если с является пробелом, и false в других случаях

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

поиск первого вхождения символа с в строке s. В случае удачного поиска возвращает указатель на место первого вхождения символа с. Если символ не найден, то возвращается ноль.

определяет длину начального сегмента строки s1, содержащего те символы, которые не входят в строку s2

возвращает длину начального сегмента строки s1, содержащего только те символы, которые входят в строку s2

Возвращает указатель первого вхождения любого символа строки s2 в строке s1

преобразует строку s1 в тип double

преобразует строку s1 в тип int

преобразует строку s1 в тип long int

Функции стандартной библиотеки ввода/вывода

считывает символ с со стандартного потока ввода, возвращает символ в формате int

считывает поток символов со стандартного устройства ввода в строку s до тех пор, пока не будет нажата клавиша ENTER

Функции для работы со строками — файлы string.h, stdlib.h

Прототип и краткое описание

double atof(char *str) ; Преобразует строку str в вещественное число типа double

int atoi(char *str) ; Преобразует строку str в десятичное целое число

long atol(char *str) ; Преобразует строку str в длинное десятичное целое число

char *itoa(int v, char *str, int baz) ; Преобразует целое v в строку str. При изображении числа используется основание baz (от 2 до 36). Для отрицательного числа и baz = 10 первый символ — минус(-)

char *ltoa(long v, char *str, int baz); Преобразует длинное целое v в строку str . При изображении числа используется основание baz (от 2 до 36)

char * strcat(char *sp, char *si); Приписывает строку si к строке sp (конкатенация строк)

Читайте также:  Пропал интернет ростелеком куда звонить

char *strchr(char *str, int c) ; Ищет в строке str первое вхождение символа с

int strcmp(char *str1 , char *str2) ; Сравнивает строки str1 и str2 . Результат отрицателен, если strl меньше str2; равен нулю, если str1 равно str2 и положителен, если str1 больше str2 (сравнение беззнаковое)

char *strcpy(char *sp, char *si) ; Копирует байты строки si в строку sp

int strcspn(char *str1, char *str2) ; Определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2

char *strdup(const char *str); Выделяет память и переносит в нее копию строки str

unsigned strlen(char *str); Вычисляет длину строки str

char *strlwr(char *str); Преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра

char *strncat(char *sp, char *si, int kol); Приписывает kol символов строки si к строке sp

int strncmp(char *str1, char *str2, int kol); Сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1 меньше str2; равен нулю, если str1 равен str2, и положителен, если str1 больше str2

char *strncpy(char *sp, char *si, int kol); Колирует kol символов строки si в строку sp («хвост» отбрасывается или дополняется пробелами)

char *strnicmp(char *str1, char *str2, int kol); Сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров

char *strnset(char *str, int с, int kol); Заменяет первые kol символов строки str символом с

char *strpbrk(char *str1, char *str2); Ищет в строке str1 первое появление любого из множества символов, входящих в строку str2

char *strrchr(char *str, int с); Ищет в строке str последнее вхождение символа с

int strset(char *str, int с); Заполняет строку str символом с

int strspn(char *str1, char *str2); Определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2

char *strstr(const char *str1, const char *str2); Ищет в строке str1 подстроки str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2

double *strtod(const char *str,char **endptr); Преобразует символьную строку str в число двойной точности. Если endpt нe равен null , то *endptr возвращает как указатель на символ, при достижении которого прекращено чтение строки str

char *strtok(char *str1, const char *str2); Ищет в строке str1 лексемы, выделенные символами из второй строки

long *strtol(const char *str ,char **endptr,intbaz); Преобразует символьную строку str к значению «длинное число» с основанием baz(от 2 до 36). Если endptr не равен null, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str

char *strupr(char *str) Преобразует буквы нижнего регистра в строке в соответствующие буквы верхнего регистра

char *ultoa(unsigned long v, char *str, int baz); Преобразует беззнаковое длинное целое v в строку str

void *calloc(unsigned n, unsigned m) ; Возвращает указатель на начало области динамически распределенной памяти для размещения n элементов по m байт каждый. При неудачном завершении возвращает значение null

unsigned coreleft(void); — для моделей памяти tiny, small, medium. unsigned long coreleft(void); — для других моделей памяти. Возвращает значение объема неиспользованной памяти, функция, уникальная для DOS, где приняты упомянутые модели памяти

Читайте также:  Сабвуфер для музыки какой лучше

void free (void *bl); Освобождает ранее выделенный блок динамически распределенной памяти с адресом первого байта bl

void *malloc(unsigned s); Возвращает указатель на блок 0 динамически распределенной памяти длиной s байт. При неудачном завершении возвращает значение null

void *realloc(void *bl, unsigned ns); Изменяет размер ранее выделенной динамической памяти с адресом bl до размера ns байт. Если bl равен null, то функция выполняется как malloc()

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

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

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

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

Для корректного вывода любая строка должна заканчиваться нуль-символом ‘’ , целочисленное значение которого равно 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 приведены в таблице.

Функция Описание
присоединяет s2 к s1, возвращает s1
присоединяет не более n символов s2 к s1, завершает строку символом ‘’, возвращает s1
копирует строку s2 в строку s1, включая ‘’, возвращает s1
копирует не более n символов строки s2 в строку s1, возвращает s1;
сравнивает s1 и s2, возвращает значение 0, если строки эквивалентны
сравнивает не более n символов строк s1 и s2, возвращает значение 0, если начальные n символов строк эквивалентны
возвращает количество символов в строке s
заполняет строку s символами, код которых равен значению c, возвращает указатель на строку s
заменяет первые n символов строки s символами, код которых равен c, возвращает указатель на строку s

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

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

Interface

Description

The strcasestr function is similar to strstr , but ignores the case of both strings.

The strnstr function locates the first occurrence of the null-terminated string c little in the string c big, where not more than c len characters are searched. Characters that appear after a character are not searched. Since the strnstr function is a FreeBSD specific API, it should only be used when portability is not a concern.

While the strcasestr function uses the current locale, the strcasestr_l function may be passed a locale directly. See xlocale for more information.

Ссылка на основную публикацию
Фум лента в стоматологии фото
Автор: G. Freedman Перевод: Александр Зыбайло Автор: G. Freedman Перевод: Александр Зыбайло Ограничение количества цемента для фиксации и использование определенной...
Усики для автомобильной антенны
Убираясь в бардачке я наткнулся на ремкомплект антенных усиков — лежит наверно уже полгода, всё наклеить не могу, то забываю,...
Усиление сигнала интернета на даче своими руками
С наступление дачного сезона, я озадачился установкой хорошего скоростного интернет на даче, у нас голосовая связь работает без проблем, а...
Функции жесткого диска в компьютере
Жесткий диск, он же винчестер, является основным местом, где хранится вся информация. В отличие от оперативной памяти, он энергетически независим,...
Adblock detector