Как в с++ отделить символы. . .
Что значит отделить?
распознать, где буква, а где символ переноса или еще что. . .
#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Я вообще-то очень редко сталкивался с ситуацией, когда у программы есть начало
А ты?
Если бы этот isalpha принимал идентификатор локали через параметр, я бы еще понял, а так эта идея просто нежизнеспособна. Ладно нет у меня сейчас сил подробнее объяснять...Ну, в начале функции установи locale
все-таки это лучше, чем изобретать велосипеды на пустом месте.
все-таки это лучше, чем изобретать велосипеды на пустом месте.
Ну, в начале функции установи localeА как быть с MT? Неужели локаль per-тредная?
да, с тредами фигня.
хотя в VS C++ есть функция int _configthreadlocale( int type); которая позволяет настроить - будет локаль определятся для всего приложения или для одного треда.
А почему не воспользоваться вторым аргументом isalpha? Разве экземпляры std::locale не независимы? 

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

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