что делает функция ispunct ch
ispunct, iswpunct, _ispunct_l, _iswpunct_l
Определяет, представляет ли целое число знак препинания.
Синтаксис
Параметры
c
Проверяемое целое число.
locale
Используемый языковой стандарт.
Возвращаемое значение
Каждая из этих подпрограмм возвращает ненулевое значение, если c является определенным представлением символа пунктуации. ispunct возвращает ненулевое значение для любого печатного символа, который не является символом пробела, или символом, для которого isAlnum не является нулевым. исвпункт возвращает ненулевое значение для любого доступного для печати расширенного символа, который не является ни расширенным символом пространства, ни расширенным символом, для которого исвалнум является ненулевым. Каждая из этих подпрограмм возвращает 0, если c не удовлетворяет условию теста.
Поведение ispunct и _ispunct_l не определено, если c не является EOF или находится в диапазоне от 0 до 0xFF включительно. Если используется библиотека отладки CRT и c не является одним из этих значений, функции создают утверждение.
Универсальное текстовое сопоставление функций
Подпрограмма TCHAR.H | &Не определено _UNICODE _MBCS | _MBCS определено | _UNICODE определено |
---|---|---|---|
_истпункт | ispunct | _ismbcpunct | iswpunct |
Комментарии
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Требования
Подпрограмма | Обязательный заголовок |
---|---|
ispunct | |
iswpunct | или |
_ispunct_l | |
_iswpunct_l | или |
Дополнительные сведения о совместимости см. в статье Compatibility.
Что делает функция ispunct ch
ispunct() |
Категория: C, Функции, Строковые и символьные | Добавил: root, 8 августа 2006 | Просмотров: 7945 |
Функция ispunct() возвращает ненулевое значение, если аргумент ch является знаком пунктуации. В противном случае возвращается нуль. Под знаками пунктуации подразумеваются все печатаемые символы за исключением пробела, которые не относятся к алфавитно-цифровым. Данная программа проверяет все символы, прочитанные из стандартного входного потока stdin, и выдает сообщение о каждом знаке пунктуации. Комментариев: 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 не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.
Функции
has_facet
Тестирует наличие того или иного аспекта в указанном языковом стандарте.
Параметры
Loc
Языковой стандарт, проверяемый на наличие аспекта.
Возвращаемое значение
true значение, если в языковом стандарте проверяется аспект. false если это не так.
Комментарии
Пример
isalnum
Проверяет, является ли элемент языкового стандарта буквенным или цифровым символом.
Параметры
Канал
Буквенно-цифровой элемент для проверки.
Loc
Языковой стандарт, содержащий буквенно-цифровой элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является буквенно-цифровым; false если это не так.
Пример
isalpha
Проверяет, является ли элемент языкового стандарта буквенным символом.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий буквенный элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является алфавитным; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: Alpha, ).
Пример
iscntrl
Определяет, является ли элемент языкового стандарта управляющим символом.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является управляющим символом; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: вкладка, ).
Пример
isdigit
Определяет, является ли элемент языкового стандарта цифровым символом.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является числовым символом; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: digit, ).
Пример
isgraph
Проверяет, является ли элемент языкового стандарта буквенно-цифровым символом или символом пунктуации.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является буквенно-цифровым или знаком препинания; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: Graph, ).
Пример
islower
Определяет, является ли элемент языкового стандарта символом в нижнем регистре.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является символом нижнего регистра; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: Lower, ).
Пример
isprint
Определяет, является ли элемент языкового стандарта символом, пригодным для печати.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является печатным; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: Print, ).
Пример
ispunct
Определяет, является ли элемент языкового стандарта символом пунктуации.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является знаком пунктуации; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: punct, ).
Пример
isspace
Определяет, является ли элемент языкового стандарта символом пустого пространства.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является символом пробела; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеетразмер ( CType CharType :: Space, ).
Пример
isupper
Определяет, является ли элемент языкового стандарта символом в верхнем регистре.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является символом верхнего регистра; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: Upper, ).
Пример
isxdigit
Определяет, является ли элемент языкового стандарта символом, используемым для представления шестнадцатеричных чисел.
Параметры
Канал
Проверяемый элемент.
Loc
Языковой стандарт, содержащий элемент для проверки.
Возвращаемое значение
true Если проверяемый элемент является символом, используемым для представления шестнадцатеричного числа; false если это не так.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). имеет( CType CharType :: ксдигит, ).
В шестнадцатеричной системе для представления чисел используется база 16. С помощью цифр от 0 до 9, а также букв от A до F без учета регистра представляются десятичные числа от 0 до 15.
Пример
tolower
Преобразует символ в нижний регистр.
Параметры
Канал
Символ для преобразования в нижний регистр.
Loc
Языковой стандарт, содержащий символ для преобразования.
Возвращаемое значение
Символ, преобразованный в нижний регистр.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). tolower( ).
Пример
toupper
Преобразует символ в верхний регистр.
Параметры
Канал
Символ для преобразования в верхний регистр.
Loc
Языковой стандарт, содержащий символ для преобразования.
Возвращаемое значение
Символ, преобразованный в верхний регистр.
Комментарии
Функция-шаблон возвращает use_facet CType CharType > ( Loc ). toupper( ).
Пример
use_facet
Возвращает ссылку на аспект указанного типа, сохраненный в языковом стандарте.
Параметры
Loc
Языковой стандарт const, содержащий тип аспекта, на который приведена ссылка.
Возвращаемое значение
Ссылка на аспект класса Facet внутри аргумента — языкового стандарта.
Комментарии
Удаление знаков препинания с помощью ispunct ()
Но если строка дана таким образом «ts=’TOK_STORE_ID’;» тогда это займет «ts=’TOK_STORE_ID’;» одним токеном или
«one,one, two;four$three two» как три жетона 1. «one,one» 2. «two;four$three» 3. «two»
Есть ли кто-нибудь, чтобы «one,one, two;four$three two» может рассматриваться как «one one two four three two» каждый отдельный токен?
Написание кода вручную, например:
Эта операция станет очень дорогой, если строка очень длинная.
В c мы делаем это для сравнения каждого символа:
В C ++, что правильный путь для этого?
Решение
This operation will become very costly when string is very very long.
Нет не будет Это будет O(n) операция, которая хороша для этой проблемы. Вы не можете получить лучше, чем это для этой операции, потому что в любом случае, вы должны смотреть на каждый символ в строке. Нет способа сделать это, не глядя на каждый символ в строке.
Другие решения
Предполагая, что вы имеете дело с типичным 8-битным набором символов, я бы начал с создания таблицы перевода:
Затем обработка строки текста может выглядеть примерно так:
Для 8-битного набора символов таблица трансляции обычно все помещается в ваш кэш L1, и цикл имеет только одну ветвь, которая очень предсказуема (всегда берется, за исключением случаев, когда вы достигаете конца строки), поэтому она должна быть довольно быстрой.
Просто чтобы быть ясно, когда я говорю «довольно быстро», я имею в виду, что я очень маловероятно, что это будет узким местом в процессе, который вы описали. Вам понадобится сочетание медленного процессора и быстрого сетевого подключения, чтобы иметь все шансы на то, что это будет узким местом при обработке данных, которые вы получаете по сети.
Если у вас Raspberry Pi с сетевым подключением 10 GbE, вы может быть Нужно сделать немного больше работы по оптимизации, чтобы не отставать (но я не уверен даже тогда). При любом менее радикальном несоответствии сеть явно станет узким местом.
На самом деле, есть. man ispunct дает мне этот красивый список:
Бери сколько хочешь.
Вы также можете использовать std::remove_copy_if полностью удалить пунктуацию:
Классификация символов в C ++: cctype
1. isalpha (): эта функция возвращает true, если символ представляет собой алфавит, иначе возвращает false. Все символы из az и AZ возвращают true в соответствии с этой функцией.
2. isalnum (): эта функция возвращает true, если символ представляет собой алфавит или число возвращает false. Все символы от az, AZ и все числа возвращают true согласно этой функции.
3. isdigit (): эта функция возвращает true, если символ является числом, иначе возвращает false. Все все числа возвращают true в соответствии с этой функцией.
// C ++ программа для демонстрации insalpha (), isnum ()
// и isdigit ()
#include
#include
using namespace std;
// инициализация массива символов
// проверка функции isalpha ()
cout » is not alphabet»
// проверка функции isalnum ()
cout » is alphanumeric»
cout » is not alphanumeric»
// проверка функции isdigit ()
cout » is not digit»
4. isblank (): эта функция возвращает true, если символ является пробелом, или табуляция возвращает false.
5. isspace (): эта функция возвращает true, если символ является пробелом или табуляцией или управляющим кодом пробела (например, / n, / r), иначе возвращает false.
6. iscntrl (): эта функция возвращает true, если символ является символом табуляции или любой другой управляющий код возвращает false.
// C ++ программа для демонстрации iscntrl (), isblank () и
// isspace ()
#include
#include
using namespace std;
// инициализация массива символов
// проверка функции iscntrl ()
cout » Character is control code «
cout » Character is not control code»
// проверка функции isblank ()
cout » Character is blank»
cout » Character is not blank»
// проверка функции isspace ()
cout » Character is space»
cout » Character is not space»
7. isprint (): эта функция возвращает true, если символ печатается на консоли, т.е. все символы, кроме управляющего кода, возвращают false.
8. isxdigit (): эта функция возвращает true, если символ шестнадцатеричный, то есть 0-9, а af возвращает false.
9. ispunct (): эта функция возвращает true, если символ является знаком пунктуации, иначе возвращает false.
// C ++ программа для демонстрации isprint (), isxdigit () и
// ispunct ()
#include
#include
using namespace std;
// инициализация массива символов
// проверка функции isprint ()
cout » is printable character «
cout » is not printable Character»
// проверка функции isxdigit ()
cout » is hexadecimal Character»
cout » is not hexadecimal Character»
// проверка функции ispunct ()
cout » is punctuation mark»
cout » is not punctuation mark»
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
- что делает функция int
- что делает функция len