#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
double get_double(const char *str)
{
/* First skip non-digit characters */
/* Special case to handle negative numbers */
while (*str
&& !(isdigit(*str
) || ((*str
== '-' || *str
== '+') && isdigit(*(str
+ 1))))) str++;
/* The parse to a double */
}
int main(void)
{
char input1[] = "fasfasf-123.412412fasfff";
char input2[] = "fasf-asf123.412412fasfff";
char input3[] = "fasfasf-123.412412fasfff";
char input4[] = "fasf+asf123.412412fasfff";
char input5[] = "fasfasf+123.412412fasfff";
printf("Input1 1: \"%s\"\n", input1
); printf("Double 1: %.10g\n", get_double
(input1
)); printf("Input 2: \"%s\"\n", input2
); printf("Double 2: %.10g\n", get_double
(input2
)); printf("Input 3: \"%s\"\n", input3
); printf("Double 3: %.10g\n", get_double
(input3
)); printf("Input 4: \"%s\"\n", input4
); printf("Double 4: %.10g\n", get_double
(input4
)); printf("Input 5: \"%s\"\n", input5
); printf("Double 5: %.10g\n", get_double
(input5
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGN0eXBlLmg+Cgpkb3VibGUgZ2V0X2RvdWJsZShjb25zdCBjaGFyICpzdHIpCnsKICAgIC8qIEZpcnN0IHNraXAgbm9uLWRpZ2l0IGNoYXJhY3RlcnMgKi8KICAgIC8qIFNwZWNpYWwgY2FzZSB0byBoYW5kbGUgbmVnYXRpdmUgbnVtYmVycyAqLwogICAgd2hpbGUgKCpzdHIgJiYgIShpc2RpZ2l0KCpzdHIpIHx8ICgoKnN0ciA9PSAnLScgfHwgKnN0ciA9PSAnKycpICYmIGlzZGlnaXQoKihzdHIgKyAxKSkpKSkKICAgICAgICBzdHIrKzsKCiAgICAvKiBUaGUgcGFyc2UgdG8gYSBkb3VibGUgKi8KICAgIHJldHVybiBzdHJ0b2Qoc3RyLCBOVUxMKTsKfQoKaW50IG1haW4odm9pZCkKewogICAgY2hhciBpbnB1dDFbXSA9ICJmYXNmYXNmLTEyMy40MTI0MTJmYXNmZmYiOwogICAgY2hhciBpbnB1dDJbXSA9ICJmYXNmLWFzZjEyMy40MTI0MTJmYXNmZmYiOwogICAgY2hhciBpbnB1dDNbXSA9ICJmYXNmYXNmLTEyMy40MTI0MTJmYXNmZmYiOwogICAgY2hhciBpbnB1dDRbXSA9ICJmYXNmK2FzZjEyMy40MTI0MTJmYXNmZmYiOwogICAgY2hhciBpbnB1dDVbXSA9ICJmYXNmYXNmKzEyMy40MTI0MTJmYXNmZmYiOwoKICAgIHByaW50ZigiSW5wdXQxIDE6IFwiJXNcIlxuIiwgaW5wdXQxKTsKICAgIHByaW50ZigiRG91YmxlIDE6ICUuMTBnXG4iLCBnZXRfZG91YmxlKGlucHV0MSkpOwogICAgcHJpbnRmKCJJbnB1dCAgMjogXCIlc1wiXG4iLCBpbnB1dDIpOwogICAgcHJpbnRmKCJEb3VibGUgMjogJS4xMGdcbiIsIGdldF9kb3VibGUoaW5wdXQyKSk7CiAgICBwcmludGYoIklucHV0ICAzOiBcIiVzXCJcbiIsIGlucHV0Myk7CiAgICBwcmludGYoIkRvdWJsZSAzOiAlLjEwZ1xuIiwgZ2V0X2RvdWJsZShpbnB1dDMpKTsKICAgIHByaW50ZigiSW5wdXQgIDQ6IFwiJXNcIlxuIiwgaW5wdXQ0KTsKICAgIHByaW50ZigiRG91YmxlIDQ6ICUuMTBnXG4iLCBnZXRfZG91YmxlKGlucHV0NCkpOwogICAgcHJpbnRmKCJJbnB1dCAgNTogXCIlc1wiXG4iLCBpbnB1dDUpOwogICAgcHJpbnRmKCJEb3VibGUgNTogJS4xMGdcbiIsIGdldF9kb3VibGUoaW5wdXQ1KSk7CgogICAgcmV0dXJuIDA7Cn0K