Strstr c что возвращает

Возвращает указатель на первое вхождение искомой строки в строке.

Функции _mbsstr и _mbsstr_l не могут использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

Параметры

str
Строка для поиска, завершающаяся символом NULL.

strSearch
Искомая строка, завершающаяся символом NULL.

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

Возвращаемое значение

Комментарии

Эти функции могут создать угрозу в связи с проблемой переполнения буфера. Проблемы переполнения буфера могут использоваться для атаки на систему, поскольку они могут допустить выполнение произвольного кода, приводящего к несанкционированному повышению прав доступа. Дополнительные сведения см. в разделе Как избежать переполнения буфера.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.

Универсальное текстовое сопоставление функций

TCHAR.H ассемблер_UNICODE & _MBCS не определено_MBCS определяется_UNICODE определяется
_tcsstrstrstr_mbsstrwcsstr
НедоступноНедоступно_mbsstr_lНедоступно

Требования

Дополнительные сведения о совместимости см. в разделе Совместимость.

Источник

How to Write a code to implement strstr function in C?

Before implementing strstr function, first thing, you need to understand strstr function. What does strstr function do? What are its uses?

What is strstr function in C?

Strstr is the inbuilt string function given in C language. This function is used to find the substring in other string. Before to write our own code to implement the strstr function in C, I briefly introduce you an inbuilt strstr function with its syntax.

Syntax Declaration for strstr function:

This function is very easy to use in c language. It has two arguments as char strings. First string contents base string in which we want to search sub-string. The Second argument is sub-string that need to be searched in base string.

If it founds substring in the base string, it returns 1. Otherwise, it returns 0.

Now here, instead of using an inbuilt strstr function, we want to implement a strstr function in C. This function will work the same like as inbuilt strstr() function.

I have been asked this question in IBM placement interview on campus.

Code to implement strstr function in C

Complete C program to write your own strstr function.

Output:

Case 1:

Case 2:

Time Complexity: O(n^2)

Difficulty Level: Medium

Do you have any other solution? Let’s code it in the comment section below.

Источник

Строковые переменные

Все три объявления в приведенном выше примере абсолютно равнозначны; заметим, что в случае «формальной» инициализации (переменная str2 ) требуется явное указание завершающего нулевого символа. В соответствии с тем, что компилятор C/C++ воспринимает имя массива как адрес его первого элемента, синтаксически допустимым и правильным является объявление переменной str3 как указателя. Именно эта форма и используется чаще всего; более того, все функции стандартной библиотеки, предназначенные для работы со строками, используют именно формальный тип «указатель на char ».

Необходимо отметить, что компилятор от Microsoft помещает строковые литералы в область, доступную только для чтения, поэтому выполнение следующего примера завершается с ошибкой «access violation»:

Чтобы иметь возможность модифицировать содержимое строки, соответствующую переменную необходимо формально объявлять как массив:

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

Управляющие последовательности

\a — звонок;
\t — горизонтальная табуляция;
\r — возврат каретки;
\n — перевод строки;
\b — «забой» (backspace);
\’ — апостроф;
\» — двойная кавычка;
\\ — обратный слэш;
\0 — символ с кодом 0.

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

\ooo — символ с восьмеричным кодом ooo;
\xHH — символ с шестнадцатеричным кодом HH.

Следующие две строки эквивалентны:

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

Еще раз подчеркнем, что все функции обработки строк, предоставляемые стандартной библиотекой, считают признаком конца строки первый символ с кодом 0, который присутствует в этой строке. Таким образом, при выполнении любых действий над строковой переменной, объявленной как

слово «City» будет игнорироваться. Рассмотрим основные функции обработки строк.

strcpy

strcat

strlen

strchr

strrchr

strstr

strcmp

_stricmp

strtok

Обратите внимание, что указатель на исходную строку передается только при первом вызове функции; при последующих вызовах для работы с этой же строкой необходимо в качестве ее адреса передавать значение NULL. Естественно, что в реальных случаях обработка лексем выполняется в цикле, завершающемся при достижении конца исходной строки:

Текстовый ввод/вывод

Поскольку нашей основной целью является создание Windows-приложений, взаимодействующих с пользователем посредством GUI, мы рассмотрим только две функции стандартной библиотеки, предназначенные для текстового ввода/вывода.

Функции преобразования данных

Поскольку Windows-приложения имеют возможность обмениваться с пользователем только текстовой информацией, периодически возникает необходимость преобразования чисел в их строковое представление и обратно — для обработки в программе уже двоичных данных. Ниже мы рассмотрим функции, предназначенные для выполнения таких преобразований.

Преобразует строковое представление целого числа str в двоичное и возвращает его. Преобразование прекращается на первом недопустимом символе; если такой символ окажется самым первым в строке, функция вернет значение 0. Пример использования:

strtol

При необходимости более гибко обрабатывать ошибки преобразования, можно воспользоваться функцией

Преобразует строковое представление дробного числа str в двоичное и возвращает его. Преобразование прекращается на первом недопустимом символе; если такой символ окажется самым первым в строке, функция вернет значение 0.0. Заметим, что исходная строка может содержать как десятичное, так и экспоненциальное представление дробного числа.

strtod

При необходимости более гибко обрабатывать ошибки преобразования, можно воспользоваться функцией

_itoa

_ltoa

_ultoa

_gcvt

_fcvt

Возвращает адрес буфера, содержащего строковое представление дробного числа number в десятичной форме; заметим, что этот буфер перезаписывается при каждом вызове функции. Через параметр num_dec необходимо передать требуемое количество десятичных знаков; при необходимости исходное число будет округлено или дополнено нулями. В переменную по адресу dec_pos будет записана требуемая позиция десятичной точки в возвращенной строке; при этом, если целая часть числа равна 0, то по этому адресу будет записано отрицательное или нулевое значение. В переменную по адресу has_sign записывается ненулевое значение для отрицательного исходного числа и 0 — в противном случае.

Таким образом, возвращаемая данной функцией строка не содержит ни знака, ни десятичной точки; ниже рассматривается несколько примеров:

_ecvt

sprintf

Здесь t — это один символ, определяющий тип аргумента, строковое представление которого должно быть подставлено на место данной форматирующей последовательности, и вид выполняемого преобразования. Это обязательная составляющая форматирующей последовательности; допустимо использование следующих символов:

tожидаемый
тип аргумента
вид преобразования
cchar
d
i
int или longв десятичной системе
uunsigned intв десятичной системе
ounsigned intв восьмеричной системе
xunsigned intв шестнадцатеричной системе, буквы a…f строчные
Xunsigned intв шестнадцатеричной системе, буквы A…F заглавные
edoubleв экспоненциальной форме, буква e строчная
Edoubleв экспоненциальной форме, буква E заглавная
fdoubleв десятичной форме
gdoubleв наиболее компактной форме, буква e строчная
Gdoubleв наиболее компактной форме, буква E заглавная
pvoid*в шестнадцатеричной системе, буквы A…F заглавные
schar*параметр интерпретируется как строка C/C++

Необязательная часть f форматирующей последовательности определяет выравнивание преобразованного аргумента, необходимость отображения его знака, etc, и может состоять из одного или нескольких символов, перечисленных ниже:

символзначение
преобразованный аргумент выравнивается по левому краю (по умолчанию — по правому)
+знак отображается при любом значении аргумента (по умолчанию — только при отрицательном)
0«лишние» позиции заполняются символом «0» (по умолчанию — пробелом)
пробелпри положительном значении аргумента на месте знака выводится пробел
#oк преобразованному аргументу добавляется префикс «0»
xк преобразованному аргументу добавляется префикс «0x»
Xк преобразованному аргументу добавляется префикс «0X»
e
E
f
преобразованный аргумент будет содержать десятичную точку даже при отсутствии дробной части
g
G
преобразованный аргумент будет содержать десятичную точку даже при отсутствии дробной части;
при необходимости дробная часть дополняется незначащими нулями

Необязательная составляющая w задает требуемую минимальную ширину преобразованного аргумента; заметим, что аргумент будет выведен полностью, даже если заданное значение окажется недостаточным.

Необязательная составляющая p определяет точность представления аргумента; ее интерпретация зависит от типа этого аргумента:

типp
e
E
f
требуемое количество знаков после десятичной точки; при необходимости выполняется
округление аргумента или дополнение его дробной части незначащими нулями
g
G
максимальное количество значащих цифр
sмаксимальное количество символов аргумента, которое следует использовать

Необязательная составляющая s «уточняет» размер целочисленного аргумента и может быть одним из следующих символов:

Если в формируемую строку необходимо вставить символ «%», то его следует написать два раза подряд. Ниже приведен пример использования функции sprintf :

Источник

Русские Блоги

Моделируйте реализацию функции strstr

Какова роль функции strstr:

Функция strstr определяет, находится ли строка, которую вам нужно найти, в исходной строке, если да, вывести позицию строки, если нет, вывести пустую.

Например: укажите два массива символов:

str1[20]=“abcdefg”,str2[10]=“bcd”;
Вы можете получить «bcdefg» с помощью функции strstr, а на выходе будет позиция строки, которую вам нужно найти.

Далее давайте подробно поговорим о методе реализации этой функции;

Прежде всего, в соответствии с методом реализации функции strstr известно, что параметры, которые функция должна передать, представляют собой две строки, и эти две строки не могут быть изменены, поэтому мы можем использовать const для изменения, а функция возвращает символ String, то также можно определить тип возвращаемого значения, поэтому мы можем написать определение такой функции: char * my_strstr (const char * dest, const char * src) <>. Среди них dest указывает на целевую строку, которая является строкой, которую нужно сравнить, а src указывает на исходную строку, которая является строкой для сравнения. Если не найден, может быть возвращен нулевой указатель.

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

Например: дайте две строки:

Установите два указателя:

На этом этапе start указывает на символ a, а substart указывает на символ b. Два указателя start и substart разыменовываются и сравниваются, чтобы определить, равны ли они, то есть * start = * substart; если два указателя равны, оба указателя направлены назад Переместите один бит, а затем разыменование, чтобы судить; если два не равны, то start перемещается на один бит назад, substart снова укажет на начальную позицию str2, и два сравниваются снова. Повторяйте этот процесс до тех пор, пока одна или обе из двух строк не встретят «\ 0» и переход не завершится. Затем вы можете использовать метод цикла, чтобы сделать это здесь; условие оценки цикла:

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

Здесь вы продолжите использовать вышеуказанный метод, вы получите другие результаты.

Оценка указателя, когда start указывает на первый b в str1, substart указывает на первый b в str2, а два равны, а затем перемещаются назад. Когда start указывает на третий b, substart указывает на c, two Не равно, тогда substart вернется и укажет на первый b в str2.

Обратите внимание, что в настоящее время start все еще указывает на третий b в str1, а start не перемещен. Используйте описанный выше метод для сравнения. Начиная с третьего b в str1, вы больше не можете найти то же самое, что и str2. Функция вернет пустое значение, но, очевидно, первая строка содержит строку, которую вам нужно найти. Таким образом, нам нужен способ решить эту проблему.

Решение:

Источник

Strstr c что возвращает

strstr()
Категория: C, Функции, Строковые и символьные | Добавил: root, 9 августа 2006 | Просмотров: 15507
Функция strstr() возвращает указатель на первое вхождение подстроки, адресуемой параметром str2, в строку, адресуемую параметром str1. Если совпадение не обнаружено, возвращается нулевой указатель.

Данная программа выводит сообщение от невпроворот.

Комментариев: 0 +

Функция wctomb() преобразует двухбайтовый символ, содержащийся в параметре in, в его многобайтовый эквивалент и помещает результат в массив, адресуемый параметром out. Массив, адресуемый параметром out, должен иметь длину не меньше MB_CUR_MAX символов.

Если параметр out равен нулю, функция wctomb() возвращает ненулевое значение в случае, когда многобайтовый символ имеет кодировку, зависящую от территориально-языковых особенностей. В противном случае возвращается нуль.

Функция wcstombs() преобразует массив двухбайтовых символов, адресуемый параметром-указателем in, в его многобайтовый эквивалент и помещает результат в массив, адресуемый параметром out. Преобразованию подлежат только первые size символов. Процесс преобразования прекращается раньше, если будет обнаружен символ конца строки (‘0’).

В версии С99 к параметрам out и in применен квалификатор restrict.

Макрос va_copy() добавлен в версии С99.

Общая процедура создания функции, которая может принимать переменное количество аргументов, такова:

Функция должна иметь по крайней мере один известный параметр (может и больше), указываемый до переменного списка параметров. (Такие параметры называются также обязательными, а параметры, следующие за ними — необязательными.) Крайний правый известный параметр называется last_parm. (Он предшествует первому необязательному параметру.) Его имя используется в качестве второго параметра в обращении к макросу va_start(). Чтобы получить доступ к любому дополнительному параметру, сначала необходимо инициализировать указатель-аргумент argptr, обратившись к макросу va_start(). (Иными словами, необходимо выполнить вызов va_start(argptr, ).) После этого значения параметров возвращаются в результате вызова макроса va_arg(). В качестве второго аргумента этого макроса (соответствующего параметру type), нужно указать тип следующего параметра. Наконец, после прочтения всех параметров до возвращения из функции необходимо вызвать макрос va_end(), чтобы гарантировать корректное восстановление стека. Если макрос va_end() вызван не будет, высока вероятность аварийного отказа программы.

Макрос va_copy() копирует список аргументов, обозначенный параметром target, в объект, обозначенный параметром source.

Функция system() передает строку, адресуемую параметром str, в качестве команды для командного процессора операционной системы.

Если функция system() вызывается с нулевым указателем, она возвращает ненулевое значение при условии доступности командного процессора и нуль в противном случае. (Программы, выполняемые в специальных средах, могут не иметь доступа к командному процессору.) Значение, возвращаемое функцией system(), определяется конкретной реализацией. Но обычно возвращается нуль при успешном выполнении команды, а ненулевое значение кода возврата означает наличие ошибки.

Функция strtoull() добавлена в версии С99.

Функция strtoull() аналогична функции strtoul() за исключением того, что она возвращает значение типа unsigned long long int. Если результат не может быть представлен как значение типа unsigned long long int, возвращается значение ULLONG_MAX, а глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке из-за выхода результата за пределы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.

Функция strtoul() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром start, в значение типа unsigned long и возвращает полученный результат. Основание системы счисления, в которой представлено число, определяется параметром radix. Если значение radix равно нулю, то основание определяется так же, как и основание системы счисления при записи констант. Если значение radix не равно нулю, то оно должно быть целым числом от 2 до 36.

В версии С99 к параметрам start и end применен квалификатор restrict.

Функция strtoul() работает следующим образом:

Сначала в строке, адресуемой параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считывается число. Считывание заканчивается как только будет обнаружен символ, который не может быть частью длинного целого числа без знака. К таким символам относятся пробелы, символы табуляции и пустой строки, знаки препинания и другие символы. Наконец, параметр end устанавливается так, чтобы указывать на «неиспользованный» остаток исходной строки, если такой существует. Например, если функция strtoul() вызывается с аргументом

«100 клещей»
то она возвратит значение

100L
а параметр end будет указывать на пробел, предшествующий слову

«клещей»
Если результат не может быть представлен как длинное целое без знака, функция strtoul() возвращает значение ULONG_MAX, а глобальная переменная errno устанавливается равной значению ERANGE, что свидетельствует об ошибке из-за выхода результата за пределы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.

Функция strtoll() добавлена в версии С99.

Функция strtoll() аналогична функции strtol() за исключением того, что она возвращает значение типа long long int. Если результат не может быть представлен как значение типа long long int, возвращается либо значение LLONG_MAX, либо значение LLONG_MIN, а глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке из-за выхода результата за пределы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.

Источник

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

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