C ++从文本文件读取,直到给定字符

时间:2015-01-10 15:42:42

标签: c++ string fstream getline stringstream

我有一个这种形式的文本文件:

1 1
2 2
3 3
#
4 3
5 1

现在我想阅读这个文本文件并计算两个变量num1num2num1计算所有角色的数量,直到#num2计算#之后所有角色的数量。

到目前为止我的代码:

Graph::Graph(string s) // s is the filename
{
    ifstream tgf(s);
    string line;
    // num1 and num2 are two private member (type int) of class Graph 
    num1 = 0; 
    num2 = 0;
    if(tgf.is_open())
    {
        while(getline(tgf, line, '#')) // this should read tgf until '#'
        {
            num1++;
        }
    } else
    {
        cout << "Can´t open textfile!" << endl;
    }
}

我不知道如何为我的问题编写代码。

2 个答案:

答案 0 :(得分:0)

为什么不简单地逐个字符地阅读

int startNewCount = 0;
char my_character
while (!tgf.eof() ) 
{
    tgf.get(my_character);
    if (my_character != '#')
    {
        startNewCount=1;
    }
    if (my_character != ' ' && startNewCount==0)
    {
        num1++
    }
    else if(my_character != ' ' && startNewCount==1)
    {
        num2++
    }
}

答案 1 :(得分:0)

我建议您在继续实际实施之前简要阅读documentation

我建议使用first overload(也存储字符)来检查你是否正在迭代正确的整数。

Graph::Graph(string s) // s is the filename
{
    ifstream tgf(s);
    string line;
    // num1 and num2 are two private member (type int) of class Graph 
    num1 = 0; 
    num2 = 0;
    bool found_del = false;
    if(tgf.is_open())
    {
        while(getline(tgf, line)) // stores # as well
        {
            if(line == "#") found_del = true;
            else{
              if(found_del) num1++; else num2++;
            } 
        }
    } else
    {
        cout << "Can´t open textfile!" << endl;
    }
}