Выборка из промежутка
От: Interceptor Украина  
Дата: 28.10.02 21:16
Оценка:
Подскажите пожалуйста как организовать на С/C++ что-то наподобие:
if a in ['0'..'9','-'] then

?
Re: Выборка из промежутка
От: the_moon  
Дата: 29.10.02 06:23
Оценка:
Здравствуйте Interceptor, Вы писали:

I>Подскажите пожалуйста как организовать на С/C++ что-то наподобие:

I>if a in ['0'..'9','-'] then

I>?


if( (a >= '0' && a <= '9' ) || a == '-' || a == '+' )
{
//is digit
}
KOPOTbILLIKA KPbIC
Re: Выборка из промежутка
От: Pushkin Россия www.linkbit.com
Дата: 29.10.02 06:34
Оценка:
Здравствуйте Interceptor, Вы писали:

I>Подскажите пожалуйста как организовать на С/C++ что-то наподобие:

I>if a in ['0'..'9','-'] then

if(strchr("0123456789-",a))
{

}
Re: Выборка из промежутка
От: Bell Россия  
Дата: 29.10.02 08:36
Оценка:
Здравствуйте Interceptor, Вы писали:

I>Подскажите пожалуйста как организовать на С/C++ что-то наподобие:

I>if a in ['0'..'9','-'] then

I>?



std::string strMask = "0123456789-";
if(strMask.find(a) != std::string::npos)
...
Любите книгу — источник знаний (с) М.Горький
Re: Выборка из промежутка
От: vadimus  
Дата: 29.10.02 11:29
Оценка: -1
Здравствуйте Interceptor, Вы писали:

Можно воспользоваться функцией


int sscanf(const char *buffer, const char *format[,addres,...]);
Re: Выборка из промежутка
От: promko Украина  
Дата: 29.10.02 18:49
Оценка:
Здравствуйте Interceptor, Вы писали:

I>Подскажите пожалуйста как организовать на С/C++ что-то наподобие:

I>if a in ['0'..'9','-'] then

можна ещо такой код попробувать но
1) код характерный для с программистов
2) он проверяет только цыфри
int nTest;
if (scanf("%d",&nTest))
// хорошо
printf("You enter correct character!!! \n");
else
// плохо
printf("You enter invalid character!!! \n");
Re[2]: Выборка из промежутка
От: Кодт Россия  
Дата: 30.10.02 08:42
Оценка:
Здравствуйте vadimus, Вы писали:

V>Можно воспользоваться функцией

V>
V>int sscanf(const char *buffer, const char *format[,addres,...]);
V>

Это фиговый ответ.

Если имелось в виду, что "разобрать строку, содержащую число, можно с помощью соответствующих функций", то изволь привести такие, как strto<u>l, atoi и пр.

Вообще, sscanf — очень прожорлив по времени. Он создает файловый буфер, много возится с ним, затем разбирает строку формата, посимвольно читает из файлового буфера (fgetc)...
В то время как strtol работает только со строкой и к тому же возвращает адрес первого непринятого символа.
Перекуём баги на фичи!
Re[3]: Выборка из промежутка
От: vadimus  
Дата: 30.10.02 12:06
Оценка:
Здравствуйте Кодт, Вы писали:

К>Если имелось в виду, что "разобрать строку, содержащую число, можно с помощью соответствующих функций", то изволь привести такие, как strto<u>l, atoi и пр.


Имелось ввиду удобство разбора строк типа "328-18-05", или подобным форматом.
Re: Выборка из промежутка
От: piAnd Россия  
Дата: 30.10.02 15:27
Оценка:
Здравствуйте Interceptor, Вы писали:

I>Подскажите пожалуйста как организовать на С/C++ что-то наподобие:

I>if a in ['0'..'9','-'] then

I>?

в цикле проверить:
bool test_a (char a)
{
char aa[11]={'0','1',...,'-'};
for (int i=0;i<11;i++)
if (a==aa[i])
return true;
return false;
}

// где-то
if (test_a(a)) {...}
Re[2]: Выборка из промежутка
От: Кодт Россия  
Дата: 30.10.02 15:40
Оценка:
Здравствуйте piAnd, Вы писали:

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


I>>Подскажите пожалуйста как организовать на С/C++ что-то наподобие:

I>>if a in ['0'..'9','-'] then

I>>?

A>в цикле проверить:
A>
A>bool test_a (char a)
A>{
A>char aa[11]={'0','1',...,'-'};
A>for (int i=0;i<11;i++)
A>if (a==aa[i])
A>return true;
A>return false;
A>}

A>// где-то
A>if (test_a(a)) {...}
A>


Ровнехонько получилась strchr
const char* strchr(const char* charset, char match)
// результат - NULL в случае неудачи либо указатель на первый встреченный символ в charset
Перекуём баги на фичи!
Re: Выборка из промежутка
От: Кодт Россия  
Дата: 30.10.02 15:43
Оценка:
Здравствуйте Interceptor, Вы писали:

I>Подскажите пожалуйста как организовать на С/C++ что-то наподобие:

I>if a in ['0'..'9','-'] then

Специально для цифр есть isdigit(char c)
И для других типичных множеств:
isspace() — пробел, табуляция, перевод строки
isalpha() — буквы
isalnum() — буквы и цифры
iscntrl() — спецсимволы (в диапазоне 0..31)
ispunct() — знаки препинания

Следовательно, в твоем случае:
if(isdigit(a) || a=='-')...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.