C ++用class读取逐行文件

时间:2016-12-28 17:47:21

标签: c++

我需要帮助。我想写问题的打开文件的程序,并且问题阅读问题,文件中的问题以<并以>结束如何用课程做到这一点? 我希望程序在你回答下一个问题之后再提出一个问题。 现在我这样做了: `

int main() {
  ifstream myfile;
  myfile.open ("21fundamentalvariabletypes.txt");
  while (myfile){
    int i = 1;
    string strInput;
    getline(myfile, strInput);
    if (strInput == "<") {
      cout << i << ".";
      i++;
    }
    if (strInput == ">") {
      cout << endl;
    }
    else {
      cout << strInput << endl;
      i++;
    }
  }
  return 0;
}

我在屏幕上看到了这个:

1&LT; sta je ispravan nacin deklaracije promenljive? - a = 4; * int a; - int a = 4; - int a = 4

1&LT; Povezati ispravan标准杆? - 1 a a - 2 b b - 3 c d - 4 d a * 1-> 3 * 2-> 3 * 3-> 4 * 4-> 1

为什么我不能使用i ++,为什么我有1.&lt;首次。但是,当我不放if ( strInput == ">" )等。然后我有1.然后问题

2 个答案:

答案 0 :(得分:0)

好吧,如果你想逐个阅读问题,你可以这样做:

int i = 0;
for(; i < line.size(); i++){
    if(line[i] == "<") break;
}
bool foundEnd = false;
int j = i + 1;
while(1){
    for(; j < line.size(); j++){
        if(line[j] == ">"){
            foundEnd = true;
            break;
        }
    }
    if(!foundEnd) {getline(myfile, line); j = 0;}
    else break;       
}
return the whole text from i to j

一步一步你可以从i到j连接线并得到你的问题

答案 1 :(得分:0)

为什么要在循环中创建字符串inputi?它意味着在每次读取行之后,这些变量将被重置,因此在循环之外声明它们。

在您的情况下,只要问题可能包含多行,您就可以每次只读取一个字符,因此将扫描此字符的每个输入是<还是>首先使一个逻辑变量为真,因为问题的标志已经开始,而后者是Xors isBegin的问题结束的标志。

并提出一系列问题并感受到:

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


int main ()
{

    char c; 
    bool isBegin = false;
    string sQuestion[10];

    ifstream in("data.txt");

    int i = 0;
    while(in >> c) // read character by character
    {
        if('<' == c) // if so then it's a sign of beginning of question so set the logical variable isBegin to true
        {
            isBegin = true; // set it to true
            continue; // in order not to add '<' to the question    
        }
        else
            if('>' == c) // if so it is a sign of end of question
            {
                isBegin = false; // so set it to false
                i++; // move to next quesiton and store it in the next element in the array
            }
        if(isBegin)
            sQuestion[i] += c; // filling the question
    }

    // checking
    for(int i(0); i < 10; i++)
        cout << sQuestion[i] << endl;

    in.close();

    cout << endl;
    return 0;
}
  • 如果你想要,你可以第一次阅读文件来计算问题的数量,然后创建一个动态的问题数组,并在每个问题上再次填写文件。