Шаг 66.
Использование строковых функций (окончание)

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

    Приведем несколько простых примеров, где используются функции, позволяющие осуществлять перевод из строки в число и обратно.


    Пример 1. Пример использования функций atol(), atoi(), atof(), осуществляющих перевод из строки в число.
#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 можно сделать вывод, что сначала компьютер "отбирает" те символы, которые можно перевести. Этот отбор заканчивается, как только компьютер "встретил" первый непереводимый символ.


    Пример 2. Пример использования функции itoa(), осуществляющей перевод из числа в строку, с учетом указанной системы счисления.
#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;
}
Текст этой программы можно взять здесь.


    Пример 3. Пример использования функции ecvt(), осуществляющей перевод числа с плавающей точкой в строку.
#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

    Анализируя полученные результаты можно заметить, что отрицательное значение параметра "Десятичная точка" указывает, что в начало результирующей строки нужно приписать нули, и их количество равно модулю этого значения.


    Пример 4. Пример использования функции gcvt(), осуществляющей перевод числа с плавающей точкой в строку.
#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


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


Предыдущий шаг Содержание Следующий шаг