Уж дедлайн близится, а реализации всё нет.
Взял и набросал следующее:
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
Тест
impersonalis
Тест
Phantom
Тест
zombiee
"23.2gh465E-1" 0 "23.2465E-1"1 "sdgf23.2465E-1"0
|
Тест
impersonalis2
"1+1" 0 "+.12E-008"1 "+.12E-008.1"0
|
Предлагаю собравшимся отписатсья (особенное если видят ошибки).
Функция, конечно позволяет вводить фантастические занчения мантиссы и показателя, но это вполне удовлетворяет моему ТЗ.