当前位置: 首页 > 知识库问答 >
问题:

如何在C++中从文件中读取字符数组(带有一些空格)

鞠子轩
2023-03-14

我正在尝试创建一个txt文件中的迷宫地图

以下是。txt文件

7 7
e%     
 %% %% 
 %% %%%
%%% %%%
  %   %
%   %  
x % %% 

7和7分别是行数和列数。 空格也是数组的内容/如何在C++中打印空格

我试过为它编写代码,但它不能与空间一起工作:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
    ifstream map("m.txt");
    if (!map) {
        cout << endl << "Failed to open file";
        return 1;
    }

    int rows = 0, cols = 0;
    map >> rows >> cols;

    vector<vector<char> > arr(rows, vector<char>(cols));
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            map >> arr[i][j];
        }
    }
    map.close();

    cout << "This is the grid from file: " << endl;
    for (int i = 0; i < rows; i++)
    {
        cout << "\t";
        for (int j = 0; j < cols; j++)
        {
            cout << arr[i][j];
        }
        cout << endl;
    }

    system("pause");
    return 0;
}

第一次问问题,希望你们能明白我的意思,谢谢你的帮助

共有2个答案

马边浩
2023-03-14

为了更好地阐明我的答案(正如Yunnosch所问)。 我的观点并不是要解决所有的问题,只是要指出为什么初始代码不能工作的问题。 真的,我没有澄清,我只是贴了一些“新”代码。

Cynthia发布的原始代码不起作用,因为operator>>读取所有字符,直到第一个空格。 我的方法是读取整行,然后将其拆分为与初始代码相同的嵌套向量。 请注意,这也将“7 7”行作为arr的一部分进行读取和存储

编辑:我不得不添加一些分号来编译它,我删除了“reserve”,因为它只会让新程序员感到困惑。

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    ifstream map("m.txt");
    if (!map) {
        cout << endl << "Failed to open file";
        return 1;
    }

    vector<vector<char> > arr;
    string line;
    // no need for size at start, we can deduce it from line size
    while(getline(map, line))
    {
        vector<char> temp;
        for (auto c : line)
            temp.push_back(c);
        arr.push_back(temp);
    }
    map.close();

    cout << "This is the grid from file: " << endl;
    // you can always get number of rows and cols from vector size
    // additionally, each line can be of different size
    for (int i = 0; i < arr.size(); i++)
    {
        cout << "\t";
        for (int j = 0; j < arr.at(i).size(); j++)
        {
            cout << arr.at(i).at(j);
        }
        cout << endl;
    }

    system("pause");
    return 0;
}
孙朝明
2023-03-14

映射>>; arr[i][j];是格式化输入。 它会跳过空格。 您必须使用不同的方法,例如std::basic_istream ::get或std::basic_istream ::getline

下面是一个使用get()示例

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
    ifstream map("m.txt");
    if (!map) {
        cout << endl << "Failed to open file";
        return 1;
    }

    int rows = 0, cols = 0;
    map >> rows >> cols;
    // Skip linebreak after line: 7 7
    map.ignore();

    vector<vector<char> > arr(rows, vector<char>(cols));
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            // Read each char, also whitespaces and linebreaks
            arr[i][j] = map.get();
        }
        // Skip linebreak
        map.ignore();
    }
    map.close();

    cout << "This is the grid from file: " << endl;
    for (int i = 0; i < rows; i++)
    {
        cout << "\t";
        for (int j = 0; j < cols; j++)
        {
            cout << arr[i][j];
        }
        cout << endl;
    }

    return 0;
}

我必须添加两个map.ignore();,因为行

map >> arr[i][j];

跳过所有换行符,但

arr[i][j] = map.get();

所以我们必须手动跳过它们。

 类似资料:
  • 我试图从一个文件中读取每个月的平均降雨量,该文件如下所示: 1月3日2日21.2 3月2日

  • 《 cin.getline()》一节中,详细介绍了如何使用 getline() 方法从 cin 输入流缓冲区中读取一行字符串。在此基础上,getline() 方法还适用于读取指定文件中的一行数据,本节就给大家做详细的讲解。 我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstrea

  • 问题内容: 我想一次从文件中读取一个数字列表作为一个字符,一次检查一个字符,以检查该字符是什么,是否是数字,句点,+或-,e或E或其他一些字符。 ..然后基于此执行我想要的任何操作。如何使用已有的现有代码执行此操作?这是我尝试过的示例,但是没有用。我是python的新手。提前致谢! 问题答案: 从文件中读取行。以文本块的形式读取整个文件,然后遍历文本的每个字符:

  • 我需要将对象保存在一个文件中。我使用GSON库。写入文件很容易,但是读取很复杂。我一个接一个地读取整个文件,但是这个解决方案效率很低。如何只读取一个JSON字符串?我不知道如何做得更好。请帮帮我。谢谢你

  • 我是一年级的学生,我正试图和字典班一起阅读一份大报告文件。我的报告格式如下: 现在,字典需要2个输入键和值,但是我如何填写呢?我想象它与一个循环,但我只是太缺乏经验,如何在这里得到一些答案。 它不是复制品,因为我尝试了不同的东西。我想读书。已包含上述格式的WER报告。我不想要一本已经满了的字典。我需要把它填满。

  • 问题内容: 谁能告诉我该怎么做? 问题答案:

  • 问题内容: 我有一个字符串,我想从中获取一些值。 我的字符串看起来像: 字符串1: 字串2: 不幸的是,存在这样一种情况,字符串将具有相同的概念,但是没有一些参数: 字串3: 我怎样才能得到的值:,,,,? 任何帮助表示赞赏! 问题答案: 您的字符串是JSON格式的,因此您需要将其 解析 为一个对象。为此,您可以使用JSON.NET。 这是有关如何将JSON字符串解析为动态对象的示例: 编码愉快!

  • 问题内容: 我想通过获取从EditText输入的文本来将文件保存到内部存储中。然后,我希望同一个文件以字符串形式返回输入的文本,并将其保存到另一个字符串中,以备后用。 这是代码: 我提供了一些评论,以帮助你进一步分析我要在哪里完成操作/使用变量的观点。 问题答案: 希望这对你有用。 写文件: 读取文件: