Ц ++ стртод () - Ц ++ стандардна библиотека

Функција стртод () у језику Ц ++ интерпретира садржај низа као број са покретном зарезом и враћа његову вредност као двоструку.

Ова функција такође поставља показивач да покаже на први знак након последњег важећег знака низа ако постоји, у супротном је показивач постављен на нулу.

За основу 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

Занимљиви Чланци...