Функції _itoa і _ltoa
ПЕРЕТВОРЕННЯ ЧИСЛА В РЯДОК
Функції strtod
Функції atof
Функція atof, певна як
double atof( const char * ptr)
виконує перетворення Asciiz-Рядка в число із плаваючою крапкою типу double. Рядок символів повинна бути представлена з урахуванням формату:
[пробіли][знак][цифри][.][цифри][е|Е[знак]цифри],
де
пробіли – послідовність пробілів або табуляторів;
знак – символ ' + ' або ' – ';
цифри – десяткові цифри;
е|Е – символ показника ступені.
Перетворення символів припиняється, як тільки знайдений перший неконвертований символ або досягнутий кінець рядка. Приклад використання функції atof:
char S [41] = "12345e66"; // оголошення й ініціалізація рядка
double d; // оголошення змінної типу double
d = atof (S); // ініціалізація змінної значенням перетвореного рядка
cout << "d=" << d << '\n'; // виводить на екран "d=1.2345e+070"
Функція strtod перетворить рядок символів у число із плаваючою крапкою. Її синтаксис має такий вигляд:
double strtod (const char *s, char **endptr);
Ця функція так само, як і функція atof, перетворить рядок, на який вказує s, у число типу double, з тим лише відмінністю, що у випадку припинення конвертування рядка повертає вказівник endptr на перший непреобразуемый символ. Це дозволяє організувати надалі обробку частини, що залишився, рядка. Приклад використання функції strtod:
|
|
char S [41] = "12345f66"; // оголошення й ініціалізація рядка
double d; // оголошення змінної типу double
char * Err; // оголошення вказівника на рядок помилки
d = strtod (S, &Err); // ініціалізація змінної значенням перетвореного рядка
// передача по вказівникові рядка помилки
cout << "d=" << d << '\n'; // виводить на екран " d = 12345 "
cout << "Error=" << Err << '\n'; // виводить на екран " Error = f66 "
Функції зворотного перетворення itoa і _ltoa роблять конвертування чисел типу int і long відповідно в рядок символів. Вони має наступний синтаксис:
char *_ltoa ( long value, char *string, int radix);
char *_itoa ( int value, char *string, int radix);
Дані функції ухвалюють як аргумент число value і перетворять його в рядок string з урахуванням підстави системи числення, представленої в змінній radix. Наступний фрагмент програми перетворить ціле число в рядок, використовуючи десятеричну систему числення:
int numb = 98765;
char S [10];
_itoa (numb, S, 10);
cout << numb << '\n' << S;
Функція gcvt має прототип:
char* gcvt (double val, int ndec, char *buf);
і здійснює конвертування числа val типу double в Ascliz-Рядок, поміщаючи її в буфер buf. Якщо число цифр, що підлягають перетворенню, менше цілого числа, зазначеного в ndec, у перетворенім числі вказуються символи знака й десяткової крапки, при цьому молодші розряди дробової частини відкидаються. А якщо ні, то число перетвориться в експонентну форму. Функція повертає вказівник на початок сформованого рядка.
|
|
Наступний нижче приклад демонструє використання функції gcvt для перетворення чисел, що мають різну представлення в масиви цифрових символів.
char str[10];
double num;
// Значущих цифр:
int sig =4;
// Звичайне представлення числа
num = 3.547;
gcvt(num, sig, str);
cout «str «'\n';
// Негативне число
num = -843.7105;
gcvt(num, sig, str);
cout «str «' \n';
// Експонентне представлення num = 0.135e4;
gcvt(num, sig, str);
cout «str «' \n';