c++ 将文本从.txt文件导入字符串的2D数组

6psbrbz9  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(136)

我尝试将.txt文件中的文本导入到一个二维字符串数组中,但似乎没有效果。.txt文件中的每一行都有三个需要复制的值/元素。
这是代码:

// i am only allowed to use these libraries.
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
{
    const int rows = 38;
    const int columns = 3;

    string companies[rows][columns];

    // Inputting file contents
    ifstream file;
    
    file.open("companies.txt");

    while(!file.eof())
    {
        for(int i = 0; i < 38; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                getline(file, companies[i][j], ',');
            }
        }
    }
    
    file.close();   
    
    cout << endl << endl;
    
    // displaying file contents using for loop

    for(int i = 0; i < 38; i++)
    {
        for(int j = 0; j < 3; j++)
        {
            cout << companies[i][j] << endl << endl;
        }
    }
    
    cout << endl << endl;

    return 0;               
}

这是我要导入的数据:

Symbol,Company Name,Stock Price
ATRL,Attock Refinery Ltd.,171.54
AVN,Avanceon Ltd. Consolidated,78.1
BAHL,Bank AL-Habib Ltd.,54.97
CHCC,Cherat Cement Company Ltd.,126.26
ippsafx7

ippsafx71#

您的代码的一个问题是您只寻找,作为分隔符,而根本不处理行之间的换行符。通常,我会建议将每一行读入std::istringstream,然后使用std::getline(',')解析每个流,但您说不允许使用<sstream>,因此您只需使用std::string::find()std::string::substr()手动解析每行。
而且,使用while(!file.eof())just plain wrong。不仅因为这是使用eof()的错误方法,而且因为您的for循环处理所有数据,所以while循环实际上没有什么可做的。
请尝试以下内容:

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

int main()
{
    const int max_rows = 38;
    const int max_columns = 3;

    string companies[max_rows][max_columns];

    string line;
    string::size_type start, end;

    // Inputting file contents
    ifstream file("companies.txt");

    int rows = 0;
    while (rows < max_rows && getline(file, line))
    {
        start = 0;
        for(int j = 0; j < max_columns; ++j)
        {
            end = line.find(',', start);
            companies[rows][j] = line.substr(start, end-start);
            start = end + 1;
        }

        ++rows;
    }
    
    file.close();   
    
    cout << endl << endl;
    
    // displaying file contents using for loop

    for(int i = 0; i < rows; ++i)
    {
        for(int j = 0; j < max_columns; ++j)
        {
            cout << companies[i][j] << endl << endl;
        }
    }
    
    cout << endl << endl;

    return 0;               
}

Online Demo

相关问题