如何以特定模式读取C ++中的一行并将其存储在字符串中?

时间:2010-09-21 21:15:35

标签: c++

我想读取类似于此类

的每行txt文件

1190/2132 123/23123 45

我想读取整行,然后将它们存储在三个单独的字符串中,以备将来用于构建树。我现在正在使用fgets,但是在将它放入字符串时遇到错误。我该怎么办?

4 个答案:

答案 0 :(得分:3)

试试这个:

std::string  line;

while(std::getline(file, line))
{
    std::stringstream  linestream(line);

    std::string word1, word2, word3;
    line >> word1 >> word2 >> word3;

    // Store words
}

答案 1 :(得分:2)

你已经标记了问题C ++,但是你说你正在使用fgets,所以我不确定你想要哪一个。

使用C stdio函数:

fscanf(file, "%s %s %s", str1, str2, str3);

使用C ++流:

input_stream >> str1 >> str2 >> str3;

答案 2 :(得分:0)

这可能有效:

string a, b, c;

getline(cin, a, '/')
getline(cin, b, ' ')

//will only get executed if the third string exist
if(cin >> c){}

答案 3 :(得分:0)

你需要得到它的工作:

  • include,以便您可以使用输入文件流打开文本文件。

  • 包括如果你想在屏幕上显示一些信息,但只是可选的。

  • 代码部分:

伪代码:

  • 定义长度为K的字符数组,其中K可以定义为MACRO
  • 打开输入文件流
  • 测试是否打开,如果打开则读取一行并解析该行直到EOF。
  • 如果没有打开,则返回-1。

守则

int fileread(const char* filename, dataType& data /* some object saving the read info. */)
{
  char lntxt[MAX_LNTXT_LENGTH_CPTIMGIDX];  // 4)
  ifstream inSR(_filename);  // 5)

  if (inSR.is_open())  // 6)
  {

    // If file is open

    while (inSR.peek()>0)
    {
      inSR.getline(lntxt, MAX_LNTXT_LENGTH_CPTIMGIDX);
      // delim can be a set of possible delim
      char* strTk = strtok(lntxt, _delim);
      while (strTk != NULL)
      {
         strTk = strtok(NULL, _delim);
         if (strTk != NULL)
         // Your code to process the data, i.e. some arithmetic operation
         // or store it in other variables or objects.**
      }

      inSR.close();
      return 0;
  }
  else  // 7)
  {
    cout <<"The file " <<_filename <<" can not be opened.";
    return -1;
  }
}