-2

ファイルから次のバイトを解析するのに 2 時間ほど費やしました。

>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT

Rosalind_という単語を保存し、すべての行を保存し、すべてを連結して、すべての行を含む文字列を1つだけにしたいと思います。

次のコードを試しましたが、おそらくまだ動作しません。常に最後の行を見逃しています。

int main()
{
    std::ifstream infile("data_set.txt");
    map < int, string > ID;
    map < int, string > dataSetMap;
    int idNumber= 0;
    int idDataSetNumber = 0;

    std::string line;
    std::vector<string> dataSetString;
    std::string seqid;

    while (!infile.eof() )
    {

        while(std::getline(infile, line))
        {

            if ( line.substr(0,1)== ">")
            {

                conct = "";
                seqid = line.substr(1,line.length() - 1);   
                ID.insert(make_pair( idNumber++, seqid));
                lineNumber = 0;
                line.clear();
                std::string data= "";
                if(dataSetString.size()>0)
                {
                    for (int i = 0; i<dataSetString.size(); i++)
                    {
                        data+=dataSetString[i];
                    }
                    dataSetMap.insert(make_pair(idDataSetNumber++, data));
                }
                dataSetString.clear();
            }

            if(!line.empty() )
            {

                dataSetString.push_back(line);
            }

        }

    }

私は問題解決のアプローチを実践しようとしていますが、それは本当に頭痛の種でした。

私もより良いアプローチを探しています。

4

2 に答える 2

-1

編集済み回答を修正してテストしました。だから、これ以上反対票を投じないでください!

int main()
{
    using namespace std;
    ifstream infile("data_set.txt");
    map < int, string > ID;
    map < int, string > dataSetMap;
    int idNumber= 0;
    int idDataSetNumber = 0;

    string line;
    vector<string> dataSetString;
    string seqid;

    while ( true)
    {
        bool b=infile.eof();
        if(!b)
            std::getline(infile, line);
        if ( line.substr(0,1)== ">" || b)
        {
            if(!b)
            {
                seqid = line.substr(1,line.length() - 1);   
                ID.insert(make_pair( idNumber++, seqid));
            }
            line.clear();
            string data= "";
            if(dataSetString.size()>0)
            {
                for (unsigned int i = 0; i<dataSetString.size(); i++)
                {
                    data+=dataSetString[i];
                }
                dataSetMap.insert(make_pair(idDataSetNumber++, data));
            }
            dataSetString.clear();
            if(b)
                break;
        }

        if(!line.empty() )
        {
            dataSetString.push_back(line);
        }

    }

    return 0;
}
于 2013-06-29T18:11:17.387 に答える