понедельник, 13 октября 2014 г.

Перевод из строки в число и обратно в Си

Рекомендую простую процедуру перевода из числа в строку:

#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{
  char c[10];
  int n;
  float f;
  cin >> n;
  sprintf (c, "%d", n);//целое число в строковый поток вывода по формату
  cout << c << endl;
  
  cin >> f;
  sprintf (c, "%.5f", f);//вещественное число с 5 знаками после запятой
  cout << c;
  return 0;
}

Если нужно извлечь цифры из строки:

#include <string.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
  string s;
  char c;
  cin >> s;
  int n = s.size(), k;
  for(int i = 0; i < n; i++)
    if (s[i] >= '0' && s[i] <= '9')
    {
      k = s[i] - '0'; //в цифру
      cout << k;
      c = k + '0'; //и обратно в символ
      cout << c;
    }
  return 0;
}

Еще один вариант:

#include <string.h>
#include <iostream>
#include <stdio.h>  //для функции sscanf
#include <stdlib.h> //для функций atoi, atof, atol, itoa, ltoa

using namespace std;

int main()
{
  char str[10] = "65.45";
  float x; 
  sscanf (str, "%f", &x);//вещественное число

  cin >> str;
  int i;
  sscanf (str, "%d", &i);//целое число
  cout << i <<" "<<x;

//преобразование из строки в число
 
  double c = atof ("23.4");
  int    b = atoi ("123");
  long   a = atol ("100000000");
  cout << a <<" " << b << " " << c << endl;

//преобразование из числа в строку с указанием системы счисления

  itoa (b, str, 10); cout << "10:" << str << endl;
  itoa (b, str, 2);  cout << "2:"  << str << endl;
  itoa (b, str, 8);  cout << "8:"  << str << endl;
  itoa (b, str, 16); cout << "16:" << str << endl;
  itoa (b, str, 5);  cout << "5:"  << str << endl;

  ltoa (a, str, 10); cout << "long:" << str << endl;

  return 0;
}

Если вы работали со string а нужно в какой-нибудь функции ссылку на char, то:

#include <string.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
  string s;
  cin >> s;
  char *c = new char [(s.size()+1)];
  strcpy (c, s.c_str());
  cout << c;
  delete c;
  return 0;
}

Для тех же операций в С++:

#include <string>
#include <iostream>
#include <sstream>
using namespace std;

int main()
{
  double a;
  int b;
  string str_d = "74326.46238", str_i = "123";

//перевод из строки в число - 1 вариант

  stringstream (str_d) >> a; cout << a << endl;
  stringstream (str_i) >> b; cout << b << endl;

//перевод из строки в число - 2 вариант

  istringstream inp_s;

  inp_s.str("25.02 rub");
  inp_s >> a;
  cout << a << endl;

  inp_s.str("3 of clock");
  inp_s >> b;
  cout << b << endl;

//перевод из числа в строку

  ostringstream out_s;
  
  out_s.precision(3); //задаем точность - 3 знака после запятой
  out_s << "double:" << a << "\nfixed:" << fixed << a << "\n";
  cout << out_s.str();

  out_s.str(""); //очистка предыдущего потока
  out_s << b << " int\n";
  string s = out_s.str(); //сохраняем как строку
  cout << s;

  return 0;
}

Комментариев нет:

Отправить комментарий