C ++相当于Scanner的.nextFloat()方法?

时间:2012-02-02 21:06:19

标签: java c++

我开始编写C ++而我正在尝试读取格式如下的文本文件:

32.0      12.43
503.2     3.212

在Java中,我可以将Scanner.nextFloat()一起使用,并将包含放入Array。我试图用C ++实现同样的目标。这是怎么做到的?

3 个答案:

答案 0 :(得分:6)

从标准输入读取

#include <iostream>

int main()
{
   float f1, f2, f3, f4;
   std::cin >> f1 >> f2 >> f3 >> f4;       
}

从文件中读取

#include <fstream>

int main()
{
   std::ifstream fin("file.txt"); //fin is an arbitrary identifier
   float f1, f2, f3, f4;
   fin >> f1;
   fin >> f2;
   fin >> f3;
   fin >> f4;  // or fin >> f1 >> f2 >> f3 >> f4; no difference     
}

要将所有浮点数读入浮点数组(向量),可以使用:

#include <fstream> 
#include <vector>
#include <iterator> //for istream_iterator and back_inserter
#include <algorithm> //for copy

int main()
{
    std::ifstream fin("input.txt");
    std::vector<float> v; //could also initialize with the two-iterator constructor
    std::copy(std::istream_iterator<float>(fin), 
              std::istream_iterator<float>(), 
              std::back_inserter(v)); //push_back into vector
}

详细了解流输入/输出here和其他地方。 我还强烈建议您阅读a good C++ book

答案 1 :(得分:0)

C ++有很多很好的原生选项来读取数据,例如,用户输入数据的std :: cin和文件的std :: ifstream。 但是,如果您正在寻找一个非常类似的Java Scanner实现,您可以在名为Scanner ++的开源项目中找到它:http://sourceforge.net/projects/scannerpp/

Java Scanner类的许多优点都在那里实现,包括nextFloat()方法。

#include "Scanner.h"

using namespace scannerpp;

int main()
{
    // to work with strings
    Scanner scanner("32.0   12.43 \n 503.2   3.212");
    float x = scanner.nextFloat();

    // to work with files
    Scanner scanner(new File("test-data.txt"));
    float x2 = scanner.nextFloat();
}

希望这有帮助!

答案 2 :(得分:-2)

您可以使用string :: find()或使用strtok()或使用Boost Tokenizer构建String Tokenizer。我不知道预先存在的扫描仪等效物。

另请查看此主题:Converting from Java to C++ Reading a File, and parsing