[英]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.