Функција стртод () у језику Ц ++ интерпретира садржај низа као број са покретном зарезом и враћа његову вредност као двоструку.
Ова функција такође поставља показивач да покаже на први знак након последњег важећег знака низа ако постоји, у супротном је показивач постављен на нулу.
За основу 10 и низ "12абц"
Важећи нумерички део -> 12
Први знак након важећег нумеричког дела -> а
Дефинисано је у заглављу датотеке.
прототип стртод ()
двоструки стртод (цонст цхар * стр, цхар ** енд);
Функција стртод () узима стринг и показивач на знак као свој параметар, интерпретира садржај низа као float
број и враћа double
вредност.
стртод () Параметри
- стр : Низ који представља број с покретном зарезом.
- крај : референца на већ додељени објекат типа цхар *. Вредност енд функција поставља на следећи знак у стр након последњег важећег знака. Овај параметар такође може бити нулти показивач и у том случају се не користи.
стртод () Повратна вредност
Функција стртод () враћа:
- двострука вредност (која се претвара из низа).
- 0.0 ако није било могуће извршити ваљану конверзију.
Ако је претворена вредност ван опсега, јавља се грешка опсега и враћа се позитиван или негативан ХУГЕ_ВАЛ.
Пример 1: Како функционише функција стртод ()?
#include #include using namespace std; int main() ( char numberString() = "12.44b 0xy"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; )
Када покренете програм, излаз ће бити:
Број у завршном низу = 12.44б 0ки Број у двоструком = 12.44 низ = б 0ки
Пример 2: функција стртод () без пратећих знакова
#include #include using namespace std; int main() ( char numberString() = "12.44"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; // If end is not Null if (*end) ( cout << end; ) // If end is Null else ( cout << "Null pointer"; ) return 0; )
Када покренете програм, излаз ће бити:
Број у завршном низу = 12.44б 0ки Број у двоструком = 12.44 Нулти показивач
Важећа вредност са помичном зарезом за функцију стртод () састоји се од опционалног знака + или - иза којег следи један од следећих скупова:
-
За децималну вредност са покретном зарезом :
-
Група децималних цифара (0-9), која опционо садржи децималну тачку (.).
На пример: 13.170, -5,63 итд. -
Изборни експонентни део (е или Е) праћен необавезним знаком + или - и непразним низом децималних цифара.
На пример: 3,46101е + 007, 13,19е-013 итд.
-
-
За хексадецималну вредност са покретном зарезом :
-
Низ који почиње са 0к или 0Кс, а затим непразан низ хексадецималних цифара, који опционо садржи децималну тачку (.).
На пример: 0кфа5, -0кб1ф.24 итд. -
Изборни експонентни део (п или П) праћен необавезним знаком + или - и непразним низом хексадецималних цифара.
На пример: 0к51ц.23п5, -0к2а.3п-3 итд.
-
-
Инфинити :
-
ИНФ или ИНФИНИТИ (игноришући случај).
На пример: -Инф, ИнфиНиТи итд.
-
-
НаН (није број) :
-
НАН или НАНсеквенца (занемарујући случај) где је секвенца секвенца знакова која се састоји само од алфанумеричких знакова или доње црте (_). Резултат је тихи НаН.
На пример: Нан, НаНаб1 итд.
-
Пример 3: Како стртод () ради са експонентима и хексадецималима?
#include #include #include using namespace std; int main() ( // initialize a exponential value char numberString() = "-44.01e-3End String"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl << endl; // initialize a new hexadecimal value strcpy(numberString,"0xf1bc.51hello"); number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; )
Када покренете програм, излаз ће бити:
Number in String = -44.01e-3End String Number in Double = -0.04401 End String = End String Number in String = 0xf1bc.51hello Number in Double = 61884.3 End String = hello
Example 4: strtod Cases for INFINITY and NaN
#include #include using namespace std; int main() ( char *end; cout << "INFINITY" << " to Double = " << strtod("INFINITY", &end) << endl; cout << "End String = " << end << endl << endl; cout << "Infabc" << " to Double = " << strtod("Infabc", &end) << endl; cout << "End String = " << end << endl << endl; cout << "NaN12a" << " to Double = " << strtod("NaN12a", &end) << endl; cout << "End String = " << end << endl << endl; return 0; )
When you run the program, the output will be:
INFINITY to Double = inf End String = Infabc to Double = inf End String = abc NaN12a to Double = nan End String = 12a
In general, a valid floating point argument for strtod() function has the following form:
(whitespace) (- | +) (digits) (.digits) ( (e | E )(- | +)digits)
The strtod() function ignores all the leading whitespace characters until the primary non-whitespace character is found.
Затим, почев од овог знака, потребно је што више знакова који формирају важећу представу с помичном тачком и претварају их у вредност са помичном тачком. Шта год је остало од низа након последњег важећег знака, чува се у објекту упереном крај.
Пример 5: функција стртод () са водећим размаком
#include #include using namespace std; int main() ( char *end; cout << "25.5" << " to Double = " << strtod(" 25.5", &end) << endl; // end pointer is set to null cout << "End String = " << end << endl << endl; // Returns 0 because of invalid conversion cout << "abc11.20" << " to Double = " << strtod("abc11.20", &end) << endl; cout << "End String = " << end << endl << endl; return 0; )
Када покренете програм, излаз ће бити:
25.5 до Доубле = 25.5 Крајњи низ = абц11.20 до Доубле = 0 Крајњи низ = абц11.20