Как в с++ отделить символы. . .
Что значит отделить?
распознать, где буква, а где символ переноса или еще что. . .
#include <ctype.h>
int isalpha(int c);
#include <ctype.h>
Перед тем как пользоваться этой замечательной библиотекой, рекомендуется 10 раз прочитать документацию, а потом все равно ею не пользоваться.

Во-первых,
char c = ...; isalpha(c)это просто ошибка, которая во многих реализациях приводит к assertion failed. А писать "правильно"
isalpha(unsigned(cможно задолбаться. Какому дураку это вообще в голову пришло?! Там идея типа в том, что EOF=int(-1 и поэтому он может путаться с char(-1 ну вобщем кг/ам. Во-вторых, поведение этих функций зависит от локали, причем не очень ясно как именно.
К сожалению я не знаю, а чем же для этой задачи стоит пользоваться.

написать самому за 5 минут
за 30 секунд, имея таблицу ascii под рукой.
bool IsAlpha (char code)
{
unsigned char Code = (unsigned char)code;
if ( (Code => 'a' && Code <= 'z') || (Code => 'A' && Code <= 'Z'
return true;
return false;
}


я решил эту проблему по-другому
bool IsAlpha (char code)если уж писать в таком виде то это будет выглядеть так:
{
unsigned char Code = (unsigned char)code;
if ( (Code => 'a' && Code <= 'z') || (Code => 'A' && Code <= 'Z'
return true;
return false;
}
bool IsAlpha (char Сode)
{
return (Code => 'a' && Code <= 'z') || (Code => 'A' && Code <= 'Z');
}
кастить к unsigned не надо по причине того что коды у английских букв меньше 128, ну и if само собой не нужен

Во-вторых, поведение этих функций зависит от локали, причем не очень ясно как именно.А что ж тут непонятного? Прелесть локалей в том, что пишешь в начале проги setlocale, и спокойно пользуешься isalpha, и возвращает она тебе то, что нужно. В противном случае тебе для каждой кодовой страницы придётся свою функцию писать.
что пишешь в начале проги setlocaleЯ вообще-то очень редко сталкивался с ситуацией, когда у программы есть начало


все-таки это лучше, чем изобретать велосипеды на пустом месте.
Ну, в начале функции установи localeА как быть с MT? Неужели локаль per-тредная?
да, с тредами фигня.
хотя в VS C++ есть функция int _configthreadlocale( int type); которая позволяет настроить - будет локаль определятся для всего приложения или для одного треда.

хз, смотреть надо - в документации этот момент не освящается.
Потому что мы говорим про ::isalpha, который в <ctype.h>, а второй параметр есть у std::isaplha, который в <locale>. Я не знаю, чего плохого в С++-ных локалях (фасеты там и прочее но что-то не видел вообще ни разу, чтобы этим пользовались.

Оставить комментарий
wizard42
буквы алфавита от символов табуляции, новой строки и тд, в строке, записанной в массиве?