На этом шаге мы закончим рассмотрение примеров использования строковых функций, в
частности, функций, преобразующих числа в строку и обратно.
Приведем несколько простых примеров, где используются функции, позволяющие осуществлять перевод из строки в число и обратно.
#include <iostream.h> #include <math.h> #include <stdlib.h> void main() { char s1[]="-123";//Значение типа int. char s2[]="66000";//Значение типа long. char s3[]="123.567e-123";//Значение типа double. char s4[]="-123.4";//Будем переводить в значение типа int. char s5[]="66000.56";//Будем переводить в значение типа long. char s6[]="123.567ф-123";//Будем переводить в значение типа double. cout << "Имеется 1-я строка: " << s1 << endl; int rez1=atoi(s1); cout << "Перевод этой строки в значение типа int дает результат: " << rez1 << endl; cout << "Имеется 2-я строка: " << s2 << endl; long rez2=atol(s2); cout << "Перевод этой строки в значение типа long дает результат: " << rez2 << endl; cout << "Имеется 3-я строка: " << s3 << endl; double rez3=atof(s3); cout << "Перевод этой строки в значение типа double дает результат: " << rez3 << endl; cout << "Имеется 4-я строка: " << s4 << endl; rez1=atoi(s4); cout << "Перевод этой строки в значение типа int дает результат: " << rez1 << endl; cout << "Имеется 5-я строка: " << s5 << endl; rez2=atol(s5); cout << "Перевод этой строки в значение типа long дает результат: " << rez2 << endl; cout << "Имеется 6-я строка: " << s6 << endl; rez3=atof(s6); cout << "Перевод этой строки в значение типа double дает результат: " << rez3 << endl; }
Результат работы программы:
Имеется 1-я строка: -123 Перевод этой строки в значение типа int дает результат: -123 Имеется 2-я строка: 66000 Перевод этой строки в значение типа long дает результат: 66000 Имеется 3-я строка: 123.567e-123 Перевод этой строки в значение типа double дает результат: 1.23567e-121 Имеется 4-я строка: -123.4 Перевод этой строки в значение типа int дает результат: -123 Имеется 5-я строка: 66000.56 Перевод этой строки в значение типа long дает результат: 66000 Имеется 6-я строка: 123.567ф-123 Перевод этой строки в значение типа double дает результат: 123.567
Из результатов перевода значений строк 4-6 можно сделать вывод, что сначала компьютер "отбирает" те символы, которые можно перевести. Этот отбор заканчивается, как только компьютер "встретил" первый непереводимый символ.
#include <iostream.h> #include <stdlib.h> void main() { char result[17]; int value=23677; itoa(value, result, 10); cout << "Десятичное значение: " << result << endl; itoa(value, result, 16); cout << "Шестнадцатеричное значение: " << result << endl; itoa(value, result, 2); cout << "Двоичное значение: " << result << endl; itoa(value, result, 7); cout << "Семеричное значение: " << result << endl; }
#include <iostream.h> #include <stdlib.h> #include <math.h> #include <alloc.h> #include <string.h> void main() { double value = M_PI; int decimal, sign; char *result = strdup(ecvt(value,10,&decimal,&sign)); cout << "Исходное значение: " << value << endl; cout << "Результирующая строка: " << result << endl; cout << "Десятичная точка: " << decimal << endl; cout << "Знак: " << sign << endl; free(result); value = -3.2345678; result = strdup(ecvt(value,10,&decimal,&sign)); cout << "Исходное значение: " << value << endl; cout << "Результирующая строка: " << result << endl; cout << "Десятичная точка: " << decimal << endl; cout << "Знак: " << sign << endl; free(result); value = -0.0002345678; result = strdup(ecvt(value,10,&decimal,&sign)); cout << "Исходное значение: " << value << endl; cout << "Результирующая строка: " << result << endl; cout << "Десятичная точка: " << decimal << endl; cout << "Знак: " << sign << endl; free(result); }
Результат работы программы:
Исходное значение: 3.14159 Результирующая строка: 3141592654 Десятичная точка: 1 Знак: 0 Исходное значение: -3.2345678 Результирующая строка: 3234567800 Десятичная точка: 1 Знак: 1 Исходное значение: -0.0002345678 Результирующая строка: 2345678000 Десятичная точка: -3 Знак: 1
Анализируя полученные результаты можно заметить, что отрицательное значение параметра "Десятичная точка" указывает, что в начало результирующей строки нужно приписать нули, и их количество равно модулю этого значения.
#include <iostream.h> #include <stdlib.h> #include <math.h> #include <string.h> #define NDEC 6 //Число десятичных разрядов. void main() { double value = M_PI; char buffer[128]; //Временный буфер. char *copy; //Указатель на результат. gcvt(value,NDEC,buffer); //Копирование в кучу строки из буфера. copy = new char [strlen(buffer)+1]; strcpy(copy,buffer); cout << "Исходное значение: " << value << endl; cout << "Результирующая строка: " << copy << endl; delete [] copy; //Возврат памяти в кучу. value = -3.2345678; gcvt(value,NDEC,buffer); copy = new char [strlen(buffer)+1]; strcpy(copy,buffer); cout << "Исходное значение: " << value << endl; cout << "Результирующая строка: " << copy << endl; delete [] copy; value = -0.0002345678; gcvt(value,NDEC,buffer); copy = new char [strlen(buffer)+1]; strcpy(copy,buffer); cout << "Исходное значение: " << value << endl; cout << "Результирующая строка: " << copy << endl; delete [] copy; }
Результат работы программы:
Исходное значение: 3.14159 Результирующая строка: 3.14159 Исходное значение: -3.234567 Результирующая строка: 3234567 Исходное значение: -0.000234568 Результирующая строка: -0.000234568
На следующем шаге мы разберем еще несколько задач, иллюстрирующих использование
строковых функций.