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

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

Эта функция также устанавливает указатель так, чтобы он указывал на первый символ после последнего допустимого символа в строке, если он есть, в противном случае указатель устанавливается в нуль.

Для базы 10 и строки «12abc»

Действительная числовая часть -> 12

Первый символ после действительной числовой части -> a

Это определено в заголовочном файле.

strtod () прототип

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

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

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

  • str : строка, имеющая представление числа с плавающей запятой.
  • конец : ссылка на уже выделенный объект типа char *. Значение end устанавливается функцией на следующий символ в строке после последнего допустимого символа. Этот параметр также может быть нулевым указателем, и в этом случае он не используется.

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 String = 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 или NANsequence (без учета регистра), где последовательность - это последовательность символов, состоящая только из буквенно-цифровых символов или символа подчеркивания (_). Результат - тихий 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 End String Number in Double = -0.04401 End String = End String Number in String = 0xf1bc.51hello Number in Double = 61884.3 End String = hello

Пример 4: strtod Cases для 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 End String = Infabc в Double = inf End String = abc NaN12a в Double = nan End String = 12a

В общем, допустимый аргумент с плавающей запятой для функции strtod () имеет следующую форму:

(пробел) (- | +) (цифры) (. цифры) ((e | E) (- | +) цифры)

Функция strtod () игнорирует все начальные пробельные символы до тех пор, пока не будет найден основной непробельный символ.

Затем, начиная с этого символа, требуется как можно больше символов, которые формируют допустимое представление с плавающей запятой и преобразуют их в значение с плавающей запятой. Все, что осталось от строки после последнего допустимого символа, сохраняется в объекте, на который указывает конец.

Пример 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

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