Преобразование строки в двойное с использованием atof

#include <stdlib.h>
....
double returnDistance(string coord1, string coord2, const vector<string> vec) {
int arr1[11], arr2[11];
istringstream iss1(coord1);
int i = 0;
while(iss1) {
iss1 >> arr1[i];
i++;
}
istringstream iss2(coord2);
i = 0;
while(iss2) {
iss2 >> arr2[i];
i++;
}
//error below when calling atof
return calculateDistance(atof(arr1[6]), atof(arr2[6]),
atof(arr1[7]), atof(arr2[7]),
atof(arr1[8]), atof(arr2[8]))
}

arr1 [] и arr2 [] оба являются массивами строк, а CalculateDistance вычисляет трехмерное расстояние с заданными координатами x, y, z, но по какой-то причине я получаю сообщение об ошибке: «Нет подходящей функции для вызова atof». Помогите, пожалуйста!

PS: я получаю следующую ошибку, когда пытаюсь использовать .c_str (): «Базовый тип ссылки на элемент« int »не является структурой или объединением»

0

Решение

Если я понимаю цель вашего кода, вы должны обновить его следующим образом:

double arr1[11], arr2[11];
...
return calculateDistance(arr1[6], arr2[6],
arr1[7], arr2[7],
arr1[8], arr2[8]);

В основном каждый arr?[?] уже является float и преобразование string-> float выполняется >> оператор.

2

Другие решения

Функция atof() для преобразования ASCII (строки стиля C) в double, Вы передаете целые числа; для этого не будет перегрузки.

Вы можете просто использовать броски (static_cast<double>(arr1[0])и т. д.), хотя вы также можете вызывать функцию с целыми числами. Или вы можете предоставить тривиальную встроенную функцию для преобразования:

inline double itof(int i) { return i; }

Я просто неправильно объявил массивы как int вместо string.

Неосторожно, но почему бы не объявить массивы как double? И проверьте границы массива тоже:

#include <vector>
#include <strstream>
#include <string>
using namespace std;

extern double calculateDistance(double x1, double y1, double x2, double y2, double x3, double y3);
double returnDistance(string coord1, string coord2, const vector<string> vec);

double returnDistance(string coord1, string coord2, const vector<string>)
{
vector<double> arr1, arr2;
istringstream iss1(coord1);
int i1 = 0;
while (iss1 && i1 < 9)  // No need to read beyond 9th number
iss1 >> arr1[i1++];

istringstream iss2(coord2);
int i2 = 0;
while (iss2 && i2 < 9)  // No need to read beyond 9th number
iss2 >> arr2[i2++];

if (i1 != i2 || i1 < 9)
return 0.0;

return calculateDistance(arr1[6], arr2[6], arr1[7], arr2[7], arr1[8], arr2[8]);
}

Это компилируется чисто. Обратите внимание, что const vector<string> Аргумент основной функции не используется и, следовательно, не указан в определении функции.

0