簡體   English   中英

如何忽略無序地圖/地圖中的單個字符串值?

[英]How to ignore a single string value in an unordered map/ map?

我有一個程序,它接收 DNA 字符串的文本文件,將它們拆分為 kmer 子字符串並計算唯一子字符串彈出的次數。 我唯一的問題是讓它識別字符串值“N”並在文件中忽略它......例如像這樣的文本文件:

3 3

澳大利亞國家稅務總局

行動組

行動組

將 dna 序列分成 3 kmer,因此是第一個整數。 問題是我想忽略 N 並繼續而不在唯一字符串值中包含 N。 所以輸出將是......

ACT、CTG、TGA...等等,而忽略了 N 值。 這是我的代碼部分,我認為該部分應包含在:

    #include <fstream>
    #include <iostream>
    #include <string>
    #include <unordered_map>

       std::string kmer = "";

     std::unordered_map<std::string, int  > dna;
       for(int i = 0; i< s.length() ; ++i){
        int z= 0;
        kmer = s.substr(z,k);
        ++z;

        if (kmer.length() != k){
                    break;
              }

//DONT UNDERSTAND WHY THIS WOULDNT WORK
       if(!dna.find("N")) !=std::string::npos)){
        dna[kmer]++;
         }

     }



          for (std::unordered_map<std::string,int>::iterator it=dna.begin(); it!=dna.end(); ++it){


            std::cout << it->first << " " << it->second << std::endl;
        }



  f.close();
  return 0;
}

好像你的線路有誤

if(!dna.find("N")) !=std::string::npos)){

你可能的意思是

if(kmer.find('N') !=std::string::npos){
  • 后一個(我認為是您的意思),使用std::string::find檢查字符串kmer中字符'N'的位置。 這是合乎邏輯的(您正在檢查 kmer 是否包含錯誤的 N),並且返回值確實可以與std::string::npos進行比較。

  • 前一個(除了 Ap31 注意到的前面有一個額外的拼寫錯誤! ),使用std::unordered_map檢查unordered_map字符串"N"的位置。 這沒有邏輯意義(您可能不使用 1-mers),並且返回值無法與std::string::npos進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM