Здравствуйте 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");
Если имелось в виду, что "разобрать строку, содержащую число, можно с помощью соответствующих функций", то изволь привести такие, как strto<u>l, atoi и пр.
Вообще, sscanf — очень прожорлив по времени. Он создает файловый буфер, много возится с ним, затем разбирает строку формата, посимвольно читает из файлового буфера (fgetc)...
В то время как strtol работает только со строкой и к тому же возвращает адрес первого непринятого символа.
Здравствуйте Кодт, Вы писали:
К>Если имелось в виду, что "разобрать строку, содержащую число, можно с помощью соответствующих функций", то изволь привести такие, как strto<u>l, atoi и пр.
Имелось ввиду удобство разбора строк типа "328-18-05", или подобным форматом.
Здравствуйте 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)) {...}
Здравствуйте piAnd, Вы писали:
A>Здравствуйте Interceptor, Вы писали:
I>>Подскажите пожалуйста как организовать на С/C++ что-то наподобие: I>>if a in ['0'..'9','-'] then
I>>? A>в цикле проверить: A>
Здравствуйте Interceptor, Вы писали:
I>Подскажите пожалуйста как организовать на С/C++ что-то наподобие: I>if a in ['0'..'9','-'] then
Специально для цифр есть isdigit(char c)
И для других типичных множеств:
isspace() — пробел, табуляция, перевод строки
isalpha() — буквы
isalnum() — буквы и цифры
iscntrl() — спецсимволы (в диапазоне 0..31)
ispunct() — знаки препинания
Следовательно, в твоем случае:
if(isdigit(a) || a=='-')...