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

Функцията strtod () в C ++ интерпретира съдържанието на низ като число с плаваща запетая и връща стойността му като двойно.

Тази функция също така задава указател, който да сочи към първия символ след последния валиден символ на низа, ако има такъв, в противен случай указателят е зададен за нула.

За основа 10 и низа "12abc"

Валидна цифрова част -> 12

Първи знак след валидна цифрова част -> a

Той се определя в заглавния файл.

strtod () прототип

 двоен strtod (const char * str, char ** end);

Функцията strtod () приема низ и указател към символ като свой параметър, интерпретира съдържанието на низ като floatчисло и връща doubleстойност.

strtod () Параметри

  • str : низ, представящ число с плаваща запетая.
  • край : Препратка към вече разпределен обект от тип char *. Стойността на end се задава от функцията на следващия символ в str след последния валиден символ. Този параметър може да бъде и нулев указател, в който случай той не се използва.

strtod () Върната стойност

Функцията strtod () връща:

  • двойна стойност (която се преобразува от низа).
  • 0.0, ако не може да се извърши валидно преобразуване.

Ако преобразуваната стойност е извън диапазона, възниква грешка в диапазона и се връща положителен или отрицателен HUGE_VAL.

Пример 1: Как работи функцията strtod ()?

 #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.44b 0xy Номер в двойно = 12.44 низ = b 0xy

Пример 2: функция strtod () без последващи символи

 #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.44b 0xy Номер в двойно = 12.44 Нулев указател

Валидна стойност с плаваща запетая за функцията strtod () се състои от незадължителен знак + или -, последван от един от следните набори:

  • За десетична стойност с плаваща запетая :

    • Група десетични цифри (0-9), по избор съдържаща десетична точка (.).
      Например: 13.170, -5.63 и т.н.

    • Незадължителна степенна част (e или E), последвана от незадължителен знак + или - и непразна последователност от десетични цифри.
      Например: 3.46101e + 007, 13.19e-013 и т.н.

  • За шестнадесетична стойност с плаваща запетая :

    • Низ, започващ с 0x или 0X, последван от непразна последователност от шестнадесетични цифри, по избор съдържаща десетична точка (.).
      Например: 0xfa5, -0xb1f.24 и т.н.

    • Незадължителна експонентна част (p или P), последвана от незадължителен знак + или - и непразна последователност от шестнадесетични цифри.
      Например: 0x51c.23p5, -0x2a.3p-3 и т.н.

  • Безкрайност :

    • INF или INFINITY (игнорирайки случай).
      Например: -Inf, InfiNiTy и др.

  • NaN (не число) :

    • NAN или NANпоследователност (пренебрегване на случай), където последователността е последователност от символи, състояща се само от буквено-цифрови знаци или долната черта (_). Резултатът е тих NaN.
      Например: Nan, NaNab1 и др.

Пример 3: Как strtod () работи с експоненти и шестнадесетични числа?

 #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; ) 

Когато стартирате програмата, изходът ще бъде:

 Номер в низ = -44.01e-3 Номер на крайния низ в Double = -0.04401 Краен низ = Номер на краен низ в низ = 0xf1bc.51поздравителен номер в Double = 61884.3 Краен низ = здравей

Пример 4: strtod Случаи за INFINITY и 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; ) 

Когато стартирате програмата, изходът ще бъде:

 INFINITY към Double = inf Краен низ = Infabc към Double = inf Краен низ = abc NaN12a до Double = nan Краен низ = 12a

По принцип валиден аргумент с плаваща запетая за функцията strtod () има следната форма:

(празно пространство) (- | +) (цифри) (.цифри) ((д | Е) (- | +) цифри)

Функцията strtod () игнорира всички водещи символи за интервали, докато не бъде намерен основният символ, който не е интервал.

След това, започвайки от този знак, са необходими колкото се може повече символи, които формират валидно представяне с плаваща запетая и ги преобразуват в стойност с плаваща запетая. Всичко, което е останало от низа след последния валиден символ, се съхранява в обекта, посочен от end.

Пример 5: функция strtod () с водещо празно пространство

 #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 до Double = 25,5 Краен низ = abc11.20 до Double = 0 Краен низ = abc11.20

Интересни статии...