Что такое код strcspn

Что такое возвращаемое значение strcspn(), когда Str1 не содержит Str2? — c

Кажется, я ничего не могу найти, но strcspn() возвращает -1, когда str1 не содержит str2? Например, скажем, у меня есть:

Будет ли функция возвращать -1 или что-то еще, если argv [1] не содержит пробела?

    1 2
  • 21 авг 2020 2020-08-21 17:50:47
  • user3735278

2 ответа

Функция продолжает проверять соответствие символа для каждого символа, присутствующего в str1, до конца строки или совпадения. Если нет совпадения, возвращается конец строки (позиция нулевого символа).

  • 21 авг 2020 2020-08-21 17:50:48
  • [email protected]

Длина начальной части str1 не содержит ни одного из символов, которые являются частью str2. Это длина str1, если ни один из символов в str2 не найден в str1.

Итак, ваш вызов strcspn(argv[1], » «); должен возвращать длину argv[1] .

В чем разница между strcspn () и strpbrk ()?

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

Длина начальной части str1, не содержащей символов, входящих в str2.

кажется оба работают одинаково, есть ли серьезные различия?

Решение

Эти функции вряд ли имеют какое-либо применение в программировании на C ++. Ну, я так думаю. Но все же, если вы хотите узнать об этом, вот ответ,

В вашем вопросе strcspn возвращает позицию персонажа в то время как strpbrk возвращает указатель

Также случайно, если ни один персонаж не найден, strpbrk возвращается нулевой указатель; IIRC при тех же обстоятельствах strcspn возвращает индекс NUL в конце строки.

Также я получил объяснение спуска strcspn () а также strpbrk () . Проверьте ссылку.

Что такое код strcspn

size_t strspn(const char *s, const char *accept);
size_t strcspn(const char *s, const char *reject);

ОПИСАНИЕ

Функция strcspn() вычисляет длину начального сегмента строки s, состоящего только из байт, не указанных в строке reject.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Функция strcspn() возвращает количество байт в начальном сегменте s, состоящем только из символов, не указанных в reject.

Что такое возвращаемое значение strcspn () Когда Str1 Не содержит str2?

Я не могу найти это в любом месте, но strcspn () возвращает -1, если str1 не содержит str2? Например, у меня есть:

Будет ли функция возвращает -1 или что-то другое, если ARGV [1] не содержит пробел?

Длина начальной части str1, не содержащей какой-либо из символов, которые являются частью str2. Это длина str1, если ни один из персонажей str2 не встречаются в str1.

Таким образом , ваш вызов strcspn(argv[1], » «); должен возвращать длину argv[1] .

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

Что такое код strcspn

«stuff» wrote in message news:210955@news.rsdn.ru.
> Хочу написать на Visual C++ функцию, которая проверяет наличие подстроки в строке. Если подстрока в строке найдена, то возвращается True, иначе False.
Для этого используй
char *strstr( const char *string, const char *strCharSet );
>
bool Pos_1(const char* szSubStr, const char* szSource)
<
return (NULL==strstr(szSource, szSubStr))?
false : true;
>

> Функция на базе strcspn:
Не-а — она (strcspn) не подходит
Посмотри на код

Здесь pos будет иметь значение 4(вхождение второго символа подстроки «Wbc» ) —
и мы некогда не узнаем найдена ли подстрока целиком или не целиком

> Функция на базе strchr:
> if (Pos_2(‘1dw’, «123w»)) AfxMessageBox(«Есть такая подстрока «);
> else AfxMessageBox(«Нет такой подстроки «);
> [/ccode]
Вместо ‘1dw’ нужно передать конкретно указанный символ например ‘d’
В твоем же случае Pos_2 будет передан последний символ литерала ‘1dw’ — ‘w’ который
конечно твоя функция и знайдет дав при этом неверный результат

От: promko
Дата: 10.03.03 23:28
Оценка: 3 (1)

Здравствуйте, stuff, Вы писали:
S>
можна ее улучшить за счет сокращения ненужных вызовов _strlwr и _strdup

От: stuff www.tarnet.pisem.net
Дата: 10.03.03 17:12
Оценка:

Хочу написать на Visual C++ функцию, которая проверяет наличие подстроки в строке. Если подстрока в строке найдена, то возвращается True, иначе False.

Функция на базе strcspn:

Функция на базе strchr:

С одиночными символами проблем нет:

Выдает сообщение, о том, что подстроки “s” в строке “123w” нет. Т.е. все правильно.

Если вызывать функции так:

ПРОБЛЕМА: В обоих вызовах функций сообщается о том что подстрока «1dw» найдена в строке «123w». Хотя это не так.

Подскажите пожалуста, что я делаю не так.

От: stuff www.tarnet.pisem.net
Дата: 10.03.03 22:44
Оценка:

Все получилось как нельзя лучше:

Большое спасибо promko!

кстати вот вид функции возвращающей расширение файла:

тоже все чудесно работатет

От: stuff www.tarnet.pisem.net
Дата: 11.03.03 01:57
Оценка:

Здравствуйте, promko, Вы писали:

Кстати я заметил, что аналогичный код на Visual C++ выполняется раз 20 быстрее,
чем такой же код на Delphi.

Browse the source code of glibc/string/strcspn.c

Warning: That file was not part of the compilation database. It may have many parsing errors.

Илон Маск рекомендует:  Операторы vba
1 /* Copyright (C) 1991-2020 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, see
16 . */
17
18 #include
19 #include
20 #include
21
22 #undef strcspn
23
24 # ifndef STRCSPN
25 # define
26 # endif
27
28 /* Return the length of the maximum initial segment of S
29 which contains no characters from REJECT. */
30 size_t
31 STRCSPN (const char *, const char *)
32 <
33 if (__glibc_unlikely (reject[ 0 ] == ‘\0’ )
34 || __glibc_unlikely (reject[ 1 ] == ‘\0’ ))
35 return __strchrnul (str, reject [ 0 ]) — str;
36
37 /* Use multiple small memsets to enable inlining on most targets. */
38 unsigned char [ 256 ];
39 unsigned char * = memset (table, 0 , 64 );
40 memset (p + 64 , 0 , 64 );
41 memset (p + 128 , 0 , 64 );
42 memset (p + 192 , 0 , 64 );
43
44 unsigned char * = (unsigned char*) reject;
45 unsigned char ;
46 do
47 p[tmp = *s++] = 1 ;
48 while (tmp);
49
50 s = (unsigned char*) str;
51 if (p[s[ 0 ]]) return 0 ;
52 if (p[s[ 1 ]]) return 1 ;
53 if (p[s[ 2 ]]) return 2 ;
54 if (p[s[ 3 ]]) return 3 ;
55
56 s = (unsigned char *) PTR_ALIGN_DOWN (s, 4 );
57
58 unsigned int , , , ;
59 do
60 <
61 s += 4 ;
62 c0 = p[s[ 0 ]];
63 c1 = p[s[ 1 ]];
64 c2 = p[s[ 2 ]];
65 c3 = p[s[ 3 ]];
66 >
67 while ((c0 | c1 | c2 | c3) == 0 );
68
69 size_t = s — (unsigned char *) str;
70 return (c0 | c1) != 0 ? count — c0 + 1 : count — c2 + 3 ;
71 >
72 libc_hidden_builtin_def (strcspn)
73

Warning: That file was not part of the compilation database. It may have many parsing errors.

Generated on 2020-Mar-30 from project glibc revision glibc-2.29.9000-166-g656dd306d4
Powered by Code Browser 2.1
Generator usage only permitted with license.

strcspn

(PHP 4, PHP 5, PHP 7)

strcspn — Возвращает длину участка в начале строки, не соответствующего маске

Описание

Возвращает длину участка в начале строки subject , который не содержит ни одного символа из строки mask .

Если параметры start и length не указаны, то все содержимое subject будет исследовано. Если же эти параметры указаны, то эффект будет таким же, как при вызове strcspn(substr($subject, $start, $length), $mask) (см. substr для дополнительной информации).

Список параметров

Строка для исследования.

Строка, содержащая каждый из запрещенных символов.

Позиция в строке subject , с которой начинается поиск.

Если start указан и не является отрицательным значением, тогда strcspn() начнет обследование строки subject с позиции, указанной в start . Например: в строке ‘abcdef‘, символ в позиции это ‘a‘, символ в позиции 2 это ‘c‘, и так далее.

Если start указан, но является отрицательным числом, то strspn() начнет обследование строки subject с позиции, указанной в параметре start , начиная с конца строки subject .

Длина фрагмента из subject для обследования.

Если параметр length указан и не является отрицательным значением, тогда будет обследовано length символов из subject , отсчитывая от стартовой позиции.

Если length передан и значение отрицательное, то будут проверяться символы, начиная со стартовой позиции и до length с конца subject .

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

Возвращает длину начального фрагмента строки subject , которая состоит полностью из символов, не включенных в параметр mask .

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

Примеры

Пример #1 Пример использования strcspn()

= strcspn ( ‘abcd’ , ‘apple’ );
$b = strcspn ( ‘abcd’ , ‘banana’ );
$c = strcspn ( ‘hello’ , ‘l’ );
$d = strcspn ( ‘hello’ , ‘world’ );
$e = strcspn ( ‘abcdhelloabcd’ , ‘abcd’ , — 9 );
$f = strcspn ( ‘abcdhelloabcd’ , ‘abcd’ , — 9 , — 5 );

var_dump ( $a );
var_dump ( $b );
var_dump ( $c );
var_dump ( $d );
var_dump ( $e );
var_dump ( $f );
?>

Результат выполнения данного примера:

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • strspn() — Возвращает длину участка в начале строки, полностью соответствующего маске

strcspn()

Синтаксис:

strcspn (subject , mask [, start [, length ]] )

Поддерживается следующими версиями PHP:

Описание функции:

Функция strсspn () возвращает число равное длине символов в начале строки и не совпадающих с каким либо символом из маски.

Обязательный аргумент. Строка сравниваемая с маской.

string mask Обязательный аргумент. Маска поиска string start

Необязательный аргумент. Аргумент определяет с какой позиции в строке следует начать поиск.

Доступен с версии 4.3

Необязательный аргумент. Аргумент определяет количество символов в строке сравниваемых с маской.

Доступен с версии 4.3

Функция strсspn () безопасна в двоичной форме.

Действие противоположное функции strсspn () выполняет функция strspn ().

Примеры:

Пример 1:

echo strсspn(«PHP5 — система разработки сценариев»,»ис»);
?>

Пример 2:

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

echo strсspn(«PHP5 — система разработки сценариев»,»ис»,1);
?>

Пример 3:

В этом примере будет проверятся только два символа слева. Обратите внимание, что если аргумент start не нужен, то вместо него ставится ноль, пустое место выдаст ошибку.

echo strсspn(«PHP5 — система разработки сценариев»,»ис»,0,2);
?>

Что такое код strcspn

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

void exit ( int status code );

int atexit ( void (*cleanup fnptr)(vold));

void abort ( void );

Функция exit должна быть знакома читателям, так как она используется: для завершения пользовательских программ (процессов) и возврашает цело-; численный код завершения в вызывающий shell. Согласно правилам, принятым в ОС UNIX, нулевое значение аргумента statusjcode означает, что программа выполнена успешно. В противном случае значение status code отлично от нуля.

Функция atexit может быть вызвана для выполнения функции, определяемой пользователем. Функция atexit используется без аргументов и не возврашает никакого значения. Она вызывается функцией exit и предназначена для выполнения завершающих действий содержащего вызовы этих функций процесса. С помощью нескольких вызовов atexit в процессе можно зарегистрировать несколько функций, и эти функции вызываются (в порядке, обратном порядку регистрации), когда содержащий их процесс вызывает exit.

Функция abort вызывается, когда процесс находится в аварийном состоянии. Эта функция завершает процесс и в ОС UNIX обеспечивает создание файла core, содержащего образ процесса. Такие файлы весьма полезны для отладки прерванных процессов.

Наконец, в заголовке объявляются функция getenv, которая позволяет процессу получать значения переменных среды shell, а также функция putenv, которая дает возможность установить переменную среды в заданное значение. Однако в ANSI С функция putenv не определена, хотя и присутствует в большинстве UNIX-систем. Прототипы функций getenv и putenv выглядят следующим образом:

char* getenv ( const char* env name ); int putenv ( const char* env def );

Значение аргумента env name, используемого при вызове getenv — это символьная строка, содержащая имя переменной среды shell. Функция возвращает значение NULL, если данная переменная среды не определена.

Значение аргумента envjdef в функции putenv — символьная строка, содержащая имя переменной среды, знак равенства и значение, которое присваивается переменной. В случае успешного выполнения эта функция возврашает нулевое значение, в случае неудачи — ненулевое.

в приведенном далее примере выводипгся значедие переменной среды PATH, а затем значение переменной среды СС устанавливается равным с++:

char* env = getenv ( PATH );

cout \ PATH\ value is: env \n;

if ( putenv( CC=c++ ) ) cerr putenv of CC failedXn ;

в заголовке объявляется набор функций, предназначенных для манипулирования символьными строками. Эти функции хорошо известны программистам, работающим на С и С++, и используются почти во всех С-программах, производящих обработку символьных строк. Вот наиболее распространенные строковые функции:

char* char* char* char* char* char* char* char*

strlen ( const char* str );

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

strncmp ( const char* str1, const char* str2, const int tS

strcat ( char* dest, const char* src ); . .

strncat ( char* dest, const char* src, const int n );

strcpy ( char* dest, const char* src );

strncpy ( char* dest, const char* src, const int n );

strchr ( const char* str, const char ch );

strrchr ( const char* str, const char ch );

strstr ( const char* str, const char* key );

strpbrk ( const char* str1, const char* delimit);

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

Возвращает количество символов аргумента str, оканчивающегося NULL-символом. NULL-символ в возвращаемом значении не учитывается

Сравнивает аргументы strl и str2. Возвращает О, если строки одинаковы; в противном случае возвращается ненулевое значение

Сравнивает первые п символов строковых аргументов strl и str2. Возвращает О, если символы совпадают; в противном случае возвращается ненулевое значение

Присоединяет строку аргумента src к строке аргумента dest. К результирующей строке rfe.?/добавляется NULL-символ. Возврашает адрес строки аргумента dest

Присоединяет первые п символов строки аргумента src к строке аргумента dest К результирующей строке dest добавляется NULL-символ. Возвращает адрес строки аргумента dest

Копирует содержимое строки аргумента src, включая завершающий NULL-символ, в dest. Возвращает адрес строки аргумента dest

Заменяет первые я символов строки аргумента dest строкой аргумента src. Если размер строки аргумента src равен или больше , то NULL-символ не копируется. Возвращает адрес строки аргумента dest

Ищет в строке str первый экземпляр символа ch. Возвращает адрес* символа ch в строке л7гили NULL, если ch не найден

Ищет в строке str последний экземпляр символа ch. Возвращает адрес символа ch в строке str или NULL, если ch не найден

Ищет в строке sir первый экземпляр символьной строки key. Возвращает адрес строки key в строке str или NULL, если key не найдена

Ищет в строке str экземпляр любого символа, указанного в аргументе delimit. Возвращает адрес совпавшего символа в строке str или NULL, если совпадение не обнаружено

В дополнение к указанным рассмотрим еще несколько полезных функций, о которых программисты, работающие на С и С++, как правило, не знают.

4.3.1. strspn, strcspn

Прототипы функций strspn и strcspn выглядят таким образом:

const char* strspn ( char* str, const char* delimit ); const char* strcspn ( char* str, const char* delimit );

Функция strspn возвращает в str число начальных символов, которые совпадают с символами, указанными в аргументе delimit. Эта функция полезна для пропуска начальных разделительных символов в строке. В нашем примере возвращается адрес следующего не являющегося пробельным символа во входном аргументе buf.

char* skip spaces ( char* buf )

return buf + strspn( buf, \t\n )

Функция strcspn возвращает число начальных символов в строке str, которые не указаны в аргументе delimit. Эта функция полезна для поиска следующего разделительного символа в символьной строке. В представленном ниже примере возвращается адрес следующей лексемы во входном аргументе buf отделенной одним из пробельных символов: t

char* get token ( char* buf )

char* ptr = buf + strspn( buf, \n\t ); /* найти начало

char* endptr = ptr + strcspn(ptr, \n\t ); /* найти разделитель

4 if ( endptr > ptr ) *endptr = \0; :>if ( *ptr )

return ptr; /* возщитить лексе */

else return NULL; /* конец строки.

Прототип функции strtok выглядит следующим образом:

const char* strtok ( char* str, const char* delimit );

Эта функция разбивает аргумент str на одну или несколько лексем. Лексемы отделяются друг от друга символами, указанными в аргументе delimit. Если аргумент j/r является адресом символьной строки, то функция strtok возвращает указатель на первую лексему*- етроке сли же аргумент str имеет значение NULL, то функция возвращает указатель на следующую лексему в ранее заданной строке.

Функция возвращает NULL, если лексем в строке больше нет.

Покажем, как строка может разбиваться на лексемы, разделенные пробельными символами. Каждая полученная лексема направляется на стандартный вывод: :

finclude finclude int main( int argc, char* argv[]

while ( -argc > 0 ) for (char* tok; tok=strtok(argv[argc], cout tok: tok endl;

Отметим, что функция strtok модифицирует входной аргумент str путем замещения в нем разделительных символов после лексем NULL-символом. Пользователи, которые желают повторно использовать символьные строки, подлежащие синтаксическому анализу функцией strtok, должны заранее сделать их дополнителные копии.

Ниже показан один из возможных способов реализации функции strtok. Отметим, что функция имеет статический указатель Iptr, обозначающий позицию следующей лексемы в строке. Кроме того, если после лексемы функция находит разделительный символ, то она замещает его NULL-символом.

Таким образом, функция модифицирует входную строку символов, извлекая из нее лексемы.

char* my strtok ( char* str, const char* delimit ) <

static char *lptr; if ( str ) (

/* начать разбор новой

str += strspn( str,delimit ) /* пропустить начальные

if (!*str ) return NULL; Iptr = str;

else if ( !lptr ) return NULL;

разделители */ /* выход, если это NULL-строка */

/* продолжить разбор старой

строки */ , /* выход, если лексем больше

char* tokn = Iptr + strspn( Iptr, \t\n ); /* пропустить

Iptr = tokn + strcspn( tokn, \t\n ); /* найти следующий

. *lptr++* -I-XO; завершить лексему NULL-символом

else Iptr = NULL; /* найти последнюю лексему

return *tokn ? tokn : NULL; /* возвратить лексему, если

Прототип функции strerror выглядит следующим образом:

const char* strerror ( int errno );

Эту функцию можно использовать для получения системного диагностического сообщения. Значение аргумента егто может быть любым кодом ошибки, определенным в файле заголовков , или глобальной переменной егто. Глобальная переменная егто устанавливается при каждом вызове системного API. Если API выполнен успешно, ее значение равно нулю, в противном случае оно отлично от нуля.

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

Функция perror может быть вызвана для печати диагностического сообщения, если какой-то системный API завершается неудачей. Функция strerror позволяет пользователям определять их собственные версии функции perror.

в следующем примере описывается возможная реализация функции perror с использованием strerror.

void my perror ( const char* msg header ) <

if (msg header && strlen(msg header)) /* печатать, если

определено пользователем */ cerr msg header : strerror ( errno ) endl;

else cerr strerror ( errno ) endl;

/* тест-программа для функции my perror */

int main( int argc, char* argv[] )

while ( -argc > OtNjK. /* для каждого аргумента командной

if ( ,(fp = fopen(*++argv, r )) ) /* fp=0 при неудачном

открытии файла */ my perror( *argv ); /* печатать дианостическое

else fclose ( fр ); /.* закрыть файл, если он открыт

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

Вот функции, объявленные в заголовке :

void* memset ( const void* memp, int ch, size t len );

int memcmp ( const void* mem1, const void* mem2, size t len );

void* memcpy ( void* dest, const void* src, sizet len );

void* memccpy ( void* dest, const void* src, const int ch, size t len );

void* memchr ( const void* memp, const int ch, size t len );

Функция memset заполняет символом ch первые len байтов области памяти, на которую указывает тетр. Она возвращает адрес тетр.

Следующий пример иллюстрирует инициализацию переменной типа stmct Stat NULL-символами:

C library function — strcspn()

Description

The C library function size_t strcspn(const char *str1, const char *str2) calculates the length of the initial segment of str1, which consists entirely of characters not in str2.

Declaration

Following is the declaration for strcspn() function.

Parameters

str1 − This is the main C string to be scanned.

str2 − This is the string containing a list of characters to match in str1.

Return Value

This function returns the number of characters in the initial segment of string str1 which are not in the string str2.

Example

The following example shows the usage of strcspn() function.

Let us compile and run the above program that will produce the following result −

Илон Маск рекомендует:  Asp разработка масштабируемых веб приложений
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL