【发布时间】:2017-04-12 04:15:28
【问题描述】:
我有一段代码正在尝试学习如何在 C++ 中进行解析。我理解我所做的一切,但我不明白如何使用 atoi()、atof()、strtod() 之类的东西。我知道它应该做什么,但我不明白为什么编译器不喜欢它。我对错误的关注是“scores[line_count] = strtod (score);”
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int readScores(string inputFile, string name[], float scores[], int array_size)
{
//delcare variables
ifstream infile;
int line_count = 0;
string line;
string named;
float score;
char character;
int word_index;
string names[array_size];
// open input file
infile.open(inputFile);
//Check if file opens succesfully.
if(infile.fail())
{
cout << "File cannot open!!" << endl;
return -1;
}
while(getline(infile, line))
{
cout << line << endl;
// PARSING GOES HERE
word_index = 0;
for(int i=0; i < (int)line.length(); i++)
{
character = line[i];
if (character == ',')
{
names[line_count] = named;
named = "";
word_index++;
}
else
{
if(word_index == 0)
{
named += character;
}
else if (word_index == 1)
{
score += character;
cout << character << " " << endl;
}
}
}
scores[line_count] = strtod (score);
line_count++;
}
//close file
infile.close();
//return line count
return line_count;
cout << line_count << endl;
}
int main(void)
{
int array_size = 50;
string inputFile = "Test.txt";
string name [array_size];
float scores [array_size];
readScores(inputFile, name, scores, array_size);
}
【问题讨论】:
-
“编译器不喜欢它”不是一个很有帮助的描述。
-
它给了我一个错误。它说,“不能将参数 1 的浮点数转换为 const char*。”
-
@Robbie 那么为什么它没有帮助呢?您传递的是
float而不是char *! -
我正在读取一个文件,上面写着“Robbie,59,32,23”,它作为一个整体读取它。我正在尝试将 59 转换为浮点值。我只是在学习如何使用这种方法进行解析。我猜 stringstream 是最好的方法。
标签: c++ parsing data-conversion