diff --git a/src/main.cpp b/src/main.cpp index 6fc3484..c757e76 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include #include #include @@ -8,6 +10,9 @@ #include #include #include"tools.hpp" +#include +#include + // std::string reversedComplement(std::string DNAsequence); @@ -17,16 +22,17 @@ const size_t MAX_SIZE = 5e4+5; -std::string reverseComplement(std::array DNAsequence) +void reverseComplement(std::array &DNAsequence,const size_t buf_size) // 注意这里要用'&'取引用,这样不用拷贝,大大减少耗时 { using namespace std; - string l = ""; + // string l = ""; int i; - int q = DNAsequence.length(); - reverse(DNAsequence.begin(), DNAsequence.end()); //将字符串反过来 + int q = strlen(DNAsequence.data()); + reverse(DNAsequence.begin(), DNAsequence.begin()+q); //将字符串反过来 for (i = 0; i < q; i++) { + char &l = DNAsequence[i]; if (DNAsequence[i] == 'A') l = l + 'T'; if (DNAsequence[i] == 'a') @@ -44,7 +50,6 @@ std::string reverseComplement(std::array DNAsequence) if (DNAsequence[i] == 'T') l = l + 'A'; } - return l; } int main() @@ -63,16 +68,18 @@ int main() OPEN_IFS_AND_CHECK(input_path, input_file_stream) OPEN_OFS_AND_CHECK(output_path, output_file_stream) - string l = ""; + // string l = ""; - while (input_file_stream.getline(buf.data(),50000,'\n')) + while (input_file_stream.getline(buf.data(),MAX_SIZE,'\n')) { int m = lines%2; - if (m == 1) - reverseComplement(buf); - // output_file_stream << reverseComplement(buf) << endl; - // else - output_file_stream << buf << endl; + const auto buf_len = strlen(buf.data()); + + if (m == 1){ + // output_file_stream << reverseComplement(buf) << endl; + reverseComplement(buf,buf_len); + } + output_file_stream.write(buf.data(), buf_len); lines++; }