Показать полную графическую версию : [решено] String to double
Доброго времени суток, ув. форумчане! Нужно написать ф-цию которая строку типа 1:0.2:2 разбивает на переменные типа double (float) со значениями 1, 0.2, 2. Вся проблема в том что в десятичном виде отбрасывает дробную часть.
int input_interval()
{
string interval, interval_part[3];
getline(cin, interval, '\n');
for (int i = 0, j = 0, from = 0; i <= interval.length(); i++)
if ((interval[i] == ':') || (i == interval.length()))
{
interval_part[j] = interval.substr(from, i - from);
from = i + 1;
j++;
}
x1 = atof(interval_part[0].c_str());
dx = atof(interval_part[1].c_str());
x2 = atof(interval_part[2].c_str());
return 0;
}
В фортране есть функции FRACTION, FLOOR См.
Справочное руководство по языку Fortran 95 (http://www.math.spbu.ru/user/rus/cluster/Doc/Library/fortran95/langref/langr_str2.6.shtml)
Выделение дробной части в Fortran (http://dxdy.ru/topic30674.html)
И там эта проблема решается довольно просто, а вот есть ли такие на Сях мне невеведомо...???... --- Поищите...
Так пойдёт?
...
String interval = "1:0.2:2"; // Тест-строка
TStringList *lDigital = new TStringList(); // Сюда будем сохранять разбиваемую строку по знаку ":"
TSysCharSet chPoint;
chPoint << ':'; // Объявляем разбиваемый символ, можно например указать несколько << '#' << ':'
ExtractStrings(chPoint, chPoint, interval.c_str(), lDigital); // разбиваем нашу строку по заданому символу в chPoint и сохраняем все разбивки в массив строк
double *array = new double[lDigital->Count]; // Создаём динамический массив для double
for(int i = 0; i < lDigital->Count; i++) // обходим циклом массив строк
array[i] = lDigital->Strings[i].ToDouble(); // в array наши числа
delete lDigital;
delete array;
...
Написал и перечитал внимательно задание, похоже вам консольный вариант нужен?
//Строки, использование strtok
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;
#include <cstring.h>
int main()
{
char string[] = "ETO PREDLOGENIE SODERGIT PYAT LEKSEM";
char *tokenPtr;
int z;
cout << "STROKA RAZBIVAETSYA NA LEKSEMI:\n" << string <<"\n\nLEKSEMI: \n\n";
tokenPtr = strtok(string, " "); // Разбивка предложения по пробелу
while(tokenPtr != NULL){
cout << tokenPtr << '\n'; // Вместо вывода на экран, сохраняйте в массив.
tokenPtr = strtok(NULL, " ");
}
cin >> z;
return 0;
}
//---------------------------------------------------------------------------
Вся проблема в том что в десятичном виде отбрасывает дробную часть. »
Не проверял если честно, попробуйте приведение типов через static_cast
char str = "2.2";
double number = static_cast<double>(str);
Разобрался, вся проблема была в форме представления десятичного числа. 0,1 переводит нормально, а в 0.1 отбрасывает дробную часть
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.