使用 C++ 读取数字行

发布于 10-17 15:14 字数 153 浏览 6 评论 0原文

读取“数字行”并将这些数字存储在向量内的标准方法是什么?

file.in
12 
12 9 8 17 101 2 

我应该逐行读取文件,用多个数字分割该行,并将标记存储在数组中吗?

我应该用什么来做到这一点?

What's the standard way of reading a "line of numbers" and store those numbers inside a vector.

file.in
12 
12 9 8 17 101 2 

Should I read the file line by line, split the line with multiple numbers, and store the tokens in the array ?

What should I use for that ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

软甜啾2024-10-24 15:14:40
#include <vector>
#include <fstream>
#include <iterator>
#include <algorithm>

std::vector<int> data;
std::ifstream file("numbers.txt");
std::copy(std::istream_iterator<int>(file), std::istream_iterator<int>(), std::back_inserter(data));
#include <vector>
#include <fstream>
#include <iterator>
#include <algorithm>

std::vector<int> data;
std::ifstream file("numbers.txt");
std::copy(std::istream_iterator<int>(file), std::istream_iterator<int>(), std::back_inserter(data));
白鸥掠海2024-10-24 15:14:40

这是一种解决方案:

#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>

int main()
{
    std::ifstream theStream("file.in"); 
    if( ! theStream )
          std::cerr << "file.in\n";
    while (true)
    {
        std::string line;
        std::getline(theStream, line);
        if (line.empty())
            break;
        std::istringstream myStream( line );
        std::istream_iterator<int> begin(myStream), eof;
        std::vector<int> numbers(begin, eof);
        // process line however you need
        std::copy(numbers.begin(), numbers.end(),
                  std::ostream_iterator<int>(std::cout, " "));
        std::cout << '\n';
    }
}

Here's one solution:

#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>

int main()
{
    std::ifstream theStream("file.in"); 
    if( ! theStream )
          std::cerr << "file.in\n";
    while (true)
    {
        std::string line;
        std::getline(theStream, line);
        if (line.empty())
            break;
        std::istringstream myStream( line );
        std::istream_iterator<int> begin(myStream), eof;
        std::vector<int> numbers(begin, eof);
        // process line however you need
        std::copy(numbers.begin(), numbers.end(),
                  std::ostream_iterator<int>(std::cout, " "));
        std::cout << '\n';
    }
}
宣告ˉ结束2024-10-24 15:14:40

std::cin 是执行此操作的最标准方法。 std::cin 消除了每个数字中的所有空格,因此您可以这样做

while(cin << yourinput)yourvector.push_back(yourinput)

,它们将自动插入到向量中:)

编辑:

如果您想从文件中读取,您可以转换您的 std::cin ,以便它自动从文件中读取:

freopen("file.in", "r", stdin)

std::cin is the most standard way to do this. std::cin eliminates all whitespaces within each number so you do

while(cin << yourinput)yourvector.push_back(yourinput)

and they will automatically be inserted to a vector :)

EDIT:

if you want to read from file, you can convert your std::cin so it reads automatically from a file with:

freopen("file.in", "r", stdin)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文