C++ 在C++;

C++ 在C++;,c++,string,C++,String,我有两个FASTA文件: file1.fasta >foo ATCGGGG >bar CCCCCC file2.fasta >qux ATCGGAAA 我现在要做的是将它们连接到一个文件中,结果是: >foo ATCGGGG >bar CCCCCC >qux ATCGGAAA 因此,保留以“>”开头的每个序列的名称。 目前,我下面的代码将该名称替换为索引,即: >0 ATCGGGG >1 CCCCCC >0 ATCGGAAA 修改下面

我有两个FASTA文件:

file1.fasta

>foo
ATCGGGG
>bar
CCCCCC
file2.fasta

>qux
ATCGGAAA
我现在要做的是将它们连接到一个文件中,结果是:

>foo
ATCGGGG
>bar
CCCCCC
>qux
ATCGGAAA
因此,保留以“>”开头的每个序列的名称。 目前,我下面的代码将该名称替换为索引,即:

>0
ATCGGGG
>1
CCCCCC
>0
ATCGGAAA
修改下面代码的正确方法是什么

#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include<stdio.h>
#include<string>
using namespace std;
#define MAX_LINE_SIZE 1024

int mk_joint_file(char *ctrlFile, char *tgtFile, char *outFile){

  char s[MAX_LINE_SIZE];

  FILE *ofp = fopen(outFile,"w");
  FILE *cfp = fopen(ctrlFile,"r");
  FILE *tfp = fopen(tgtFile,"r");


  //  char *p;
  int flg=false;
  int line=0;
  while(fgets(s,MAX_LINE_SIZE,cfp) != NULL){
      if(s[0]=='>'){
          flg=true;
          fprintf(ofp,">%d\n",line);
          line++;
      }else{
          if(flg==true){
              fprintf(ofp,"%s",s);
          }
          flg=false;
      }
  }

  flg=false;
  line=0;
  while(fgets(s,MAX_LINE_SIZE,tfp) != NULL){
      if(s[0]=='>'){
          flg=true;
          fprintf(ofp,">%d\n",line);
          line++;
      }else{
          if(flg==true)
              fprintf(ofp,"%s",s);
          flg=false;
      }
  }

  fclose(cfp);
  fclose(tfp);
  fclose(ofp);


  return(0);
}

int main(int argc, char **argv)
{
    string ifname_control = argv[1];
    string ifname_target = argv[2];
    string ofname = "newjoin.txt";
    mk_joint_file((char *)ifname_control.c_str(), (char *)ifname_target.c_str(), (char *)ofname.c_str());

}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
#定义最大行大小1024
int mk_联合文件(char*ctrlFile、char*tgtFile、char*outFile){
字符s[最大行大小];
文件*ofp=fopen(输出文件,“w”);
文件*cfp=fopen(ctrlFile,“r”);
文件*tfp=fopen(tgtFile,“r”);
//char*p;
int flg=假;
内线=0;
while(fgets(s,MAX_LINE_SIZE,cfp)!=NULL){
如果(s[0]=='>'){
flg=真;
fprintf(ofp,“>%d\n”,行);
line++;
}否则{
如果(flg==真){
fprintf(ofp,“%s”,s);
}
flg=假;
}
}
flg=假;
直线=0;
while(fgets(s,最大线尺寸,tfp)!=NULL){
如果(s[0]=='>'){
flg=真;
fprintf(ofp,“>%d\n”,行);
line++;
}否则{
如果(flg==真)
fprintf(ofp,“%s”,s);
flg=假;
}
}
fclose(cfp);
全要素生产率;
fclose(ofp);
返回(0);
}
int main(int argc,字符**argv)
{
字符串ifname_control=argv[1];
字符串ifname_target=argv[2];
name=“newjoin.txt”的字符串;
mk_joint_文件((char*)ifname_control.c_str(),(char*)ifname_target.c_str(),(char*)of name.c_str();
}

这比仅仅更改这些行难吗

fprintf(ofp,">%d\n",line);


把第29行和第40行换成
fprintf(ofp,“%s”,s)

您需要为此编写程序吗?可以从命令行/shell连接两个文本文件。在Windows命令提示符下,您可以只说
copy file1.fasta+file2.fasta newjoin.txt
// TODO check fgets() handling of EOL - may not need the \n
fprintf(ofp, %s\n", s);