C++ fstream和getline的用法

今天整点技术性的东西。

例如:文件data.txt内容

1 轻 无 疼 烧 轻
2 轻 无 疼 正常 轻

 

通过C++ fstream和getline的方法将信息读到一个二维数组string data[][]

 

方法一:(适用于已知行数和列数,且要求以空格或制表符间隔)

#include <fstream>
#include <string>

using namespace std;

void main()
{
    ifstream ifile("data.txt");
    string data[2][6];

    for(int i = 0; i < 2; i ++)
      for(int j = 0; j < 6; j ++)
        ifile>>data[i][j];
    ifile.close();
}

 

方法二:(未知行数和列数 且 分割符不限于 空格)

#include <fstream>
#include <string>
#include <vector>

using namespace std;

typedef vector<vector<string>> vvs;

void main()
{
    ifstream infile("data.txt");
    infile>>noskipws;//不忽略空白且把每行最后那个'\n'也读进来
 
    //判断行数和列数,文件中每列数据以空格隔开
    int row, col, k;
    row = col = 0;

    char chr;
    while(infile>>chr)
    {
        switch(chr)
        {
         case '\n':  //判断读入字符是否为换行符
             ++ row;  //是换行符则行数+1
             col = 0; //是换行符则列数清零
         break;
         case ' ':  //判断读入字符是否为空格
         ++ col;  //则列数+1
         break;
         default:;
        }
     }
    infile.close();  //关闭文本文件

    row ++; col++;  //读文件得到的行列数均加1才是真正的行列数(注意:文件最后没有空白行)
 
    vvs data; // 定义二维字符串数组
    data.resize(row);
    for(k = 0; k < row; k ++)
        data[k].resize(col);
 
    ifstream infile2("data.txt");

    int trow, tcol;
    trow = tcol = 0;

    string str;
    while(trow < row)//循环比较,以行数作为限制
    {
        while(tcol < col-1)
        {
            getline(infile2,str,' '); //以空格为分隔对象,进行数据读入
            data[trow][tcol] = str;  //将空格前的数据保存到相应的字符串数组中
            tcol++;      //保存好数据后列数+1
        }
        getline(infile2,str,'\n');  //将回车符作为对象进行数据输入,以判断一行是否结束
        data[trow][tcol] = str;   //将回车符前面的数据读入到相应的字符串数组中
        tcol = 0;      //列数赋值为1,准备下一行的判断
        trow ++;      //行数+1
    }
    infile2.close();

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,可以使用fstream库中的ifstream、ofstreamfstream三个类来进行文件的输入和输出操作。其中,ifstream类用于从文件中读取数据,ofstream类用于将数据写入文件,而fstream类则可用于读取和写入文件。 下面是一个简单的例子,演示了如何使用fstream库中的ofstream类来将数据写入文件: ``` #include <iostream> #include <fstream> using namespace std; int main() { // 创建一个名为myfile.txt的文件,并将数据写入其中 ofstream myfile("myfile.txt"); if (myfile.is_open()) { myfile << "Hello, world!" << endl; myfile << "This is a test file." << endl; myfile.close(); } else { cout << "Unable to open file."; } return 0; } ``` 在上面的例子中,我们首先创建了一个名为myfile.txt的文件,并将其赋给了ofstream对象myfile。接着,我们使用myfile对象的<<运算符将数据写入文件,并在写入完成后关闭文件。需要注意的是,如果无法打开文件,则应该输出错误信息。 当然,我们也可以使用ifstream类来从文件中读取数据,如下所示: ``` #include <iostream> #include <fstream> using namespace std; int main() { // 打开名为myfile.txt的文件,并从中读取数据 ifstream myfile("myfile.txt"); if (myfile.is_open()) { string line; while (getline(myfile, line)) { cout << line << endl; } myfile.close(); } else { cout << "Unable to open file."; } return 0; } ``` 在上面的例子中,我们首先创建了一个名为myfile.txt的文件,并将其赋给了ifstream对象myfile。接着,我们使用while循环从文件中读取数据,并将其输出到控制台上。 需要注意的是,无论是进行文件的输入还是输出操作,都需要在文件操作完成后关闭文件,以释放文件资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值