首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当图形C++的文件读取+组件时,当字符第二次出现时停止

当图形C++的文件读取+组件时,当字符第二次出现时停止
EN

Stack Overflow用户
提问于 2014-04-22 00:48:48
回答 2查看 63关注 0票数 0

你好,我有一个小问题,我试图从一个文件加载到另一个文件。问题是:幼稚包含图形:something图: something2等等。我只需要加载那个图:和图形:),但是在第二个文件中不能写图形:只有的东西

后来我需要计算一个图的成分,我已经有了计算图的成分的功能,但是我只需要加载一个图,写一个组件,然后清除它,加载第二个,等等。我在那个文件中有9个图。知道怎么做吗?这是我的代码:

代码语言:javascript
复制
void load2()
{
  ifstream infile;
  infile.open("graph.txt"); //input file
  ofstream outfile;
  outfile.open("out.txt"); //output file

  while (!infile.eof()) {
    char c = infile.get();

    if (c == 'g') {
      break;
    }

    while (!infile.eof()) {
      char c = infile.get();

      if (c == 'g') {
        for (int i = 0; i < 6; i++) { //delete 6 characters include g (graph)
          infile >> c;
        }
      }

      outfile << c;
    }
  }

  infile.close();
  outfile.close();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-22 01:00:36

假设graph:something用空格分隔

代码语言:javascript
复制
void load2()
{
  ifstream infile("graph.txt");
  ofstream outfile("out.txt");

  std::string graph, something;

  while (infile >> graph >> something) {
    if (graph != "graph:") {
      break;
    }
    outfile << something;
  }
}

下面应该处理您的评论中所解释的格式

代码语言:javascript
复制
std::string token;
while (infile >> token) {
  if (token != "graph:") {
    outfile << token;
  }
}
票数 0
EN

Stack Overflow用户

发布于 2014-04-22 02:16:01

下面是我如何使用C++11来完成这个任务:

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main(int argc, char *argv[])
{
    const std::string target{"graph:"};
    if (argc < 2) {
        std::cout << "Usage: graph filename\n";
        return 0;
    }
    std::string line;
    std::size_t t1;
    std::size_t t2;
    std::string output;
    std::vector<std::string> answers;
    bool emitting = false;
    for (std::ifstream in(argv[1]); std::getline(in, line); ) {
        t1 = 0;
        for (t2=line.find(target); t2 != std::string::npos; 
             t2 = line.find(target,t1)) 
        {
            if (emitting) {
                output += line.substr(t1,t2-t1);
                answers.push_back(output);
                output.clear();
                // emitting = false;
            } else {
                emitting = true;
            }
            t1 = t2+target.size();
        }
        if (emitting) {
            output += line.substr(t1);
            output += '\n';
        }
    }

    for (const auto &s : answers) 
        std::cout << "[" << s << "]";
    std::cout << '\n';
}

如果您的文件内容是:

代码语言:javascript
复制
graph: Q R J A graph: P L L A graph: A B C D graph:

此程序将打印:

代码语言:javascript
复制
[ Q R J A ][ P L L A ][ A B C D ]

如果您打算只在图的匹配对之间打印:令牌,请取消注释输出行,然后它将打印出来。

代码语言:javascript
复制
[ Q R J A ][ A B C D ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23208480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档