如何在不使用 C ++ 中的 stod()或 strtod()的情况下重写 readDetails 功能? 我将使用的编译器没有启用c ++ 11,我得到了
'stod'未在此范围错误中声明
int readDetails(SmallRestaurant sr[])
{
//Declaration
ifstream inf;
//Open file
inf.open("pop_density.txt");
//Check condition
if (!inf)
{
//Display
cout << "Input file is not found!" << endl;
//Pause
system("pause");
//Exit on failure
exit(EXIT_FAILURE);
}
//Declarations and initializations
string fLine;
int counter = 0;
int loc = -1;
//Read
getline(inf, fLine);
//Loop
while (inf)
{
//File read
loc = fLine.find('|');
sr[counter].nameInFile = fLine.substr(0, loc);
fLine = fLine.substr(loc + 1);
loc = fLine.find('|');
sr[counter].areaInFile = stod(fLine.substr(0, loc)); //line using stod
fLine = fLine.substr(loc + 1);
loc = fLine.find('|');
sr[counter].popInFile = stoi(fLine.substr(0, loc));
fLine = fLine.substr(loc + 1);
sr[counter].densityInFile = stod(fLine); //line using stod
counter++;
getline(inf, fLine);
}
//Return
return counter;
}
以下是我要阅读的文字:
人口普查局201,阿拉巴马州奥托加县| 9.84473419420788 | 1808 | 183.651479494869 人口普查区202,阿拉巴马州奥托加县| 3.34583234555866 | 2355 | 703.860730836106 人口普查路线203,阿拉巴马州奥托加县| 5.35750339330735 | 3057 | 570.60159846447
答案 0 :(得分:0)
使用std::istringstream
。
std::string number_as_text("123");
int value;
std::istringstream number_stream(number_as_text);
number_stream >> value;
编辑2:对于那些迂腐的人:
以下示例读取双精度数。与上面读取整数的模式非常相似。
std::string number_as_text("3.14159");
double pi;
std::istringstream number_stream(number_as_text);
number_stream >> pi;
您还可以使用sprintf
的变体。
编辑1:另一种解析方法
你可以尝试:
std::string tract;
std::string county;
std::string state;
double value1;
char separator;
//...
std::ifstream input("myfile.txt");
//...
std::getline(input, tract, ',');
std::getline(input, county, ',');
std::getline(input, state, '|');
input >> value1;
input >> separator;
//...
input.ignore(100000, '\n'); // Ignore any remaining characters on the line
以上并不需要单独的字符串到数字转换。