Показать сообщение отдельно
Старый 10.10.2009, 03:29   #22
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

Уж дедлайн близится, а реализации всё нет.
Взял и набросал следующее:
bool Check(char *s,int LEN){
	enum SymbolIs{DIGIT,EXP,SEP,SIGN,ETC};
	SymbolIs Key;
	int i;
	int Epos=-1;
	int Spos=-1;
	bool ExitFlg=true;
	for(i=0;i<LEN && ExitFlg;i++){
		if(s[i]>='0' && s[i]<='9'){
			Key=DIGIT;
		}
		else if(s[i]=='E' || s[i]=='e'){
			Key=EXP;
		}
		else if(s[i]=='.' || s[i]==','){
			Key=SEP;
		}
		else if(s[i]=='+' || s[i]=='-'){
			Key=SIGN;
		}
		else{
			Key=ETC;
		}
		switch(Key){
			case DIGIT:{
				break;
					   }
			case EXP:{
				if(Epos!=-1){
					ExitFlg=false;
					break;
				}
				Epos=i;
				break;
					 }
			case SEP:{
				if(Spos!=-1){
					ExitFlg=false;
					break;
				}
				Spos=i;
				break;
					 }
			case SIGN:{
				if(i==0 || Epos==i-1){
					break;
				}
				ExitFlg=false;
				break;
					  }
			case ETC:{
				ExitFlg=false;
				break;
					 }
		}
	}
	return ExitFlg;
}
Прогоним на тестах:

Тест SBJoker
"ололо"
0
"15445.1"
1
Тест impersonalis
"12БЛДЖАД!"
0
Тест Phantom
"123.345E-12"
1
Тест zombiee
"23.2gh465E-1"
0
"23.2465E-1"
1
"sdgf23.2465E-1"
0
Тест impersonalis2
"1+1"
0
"+.12E-008"
1
"+.12E-008.1"
0
Предлагаю собравшимся отписатсья (особенное если видят ошибки).
Функция, конечно позволяет вводить фантастические занчения мантиссы и показателя, но это вполне удовлетворяет моему ТЗ.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (14.03.2010)