gpt4 book ai didi

c++ - 如何忽略无序映射/映射中的单个字符串值?

转载 作者:行者123 更新时间:2023-11-30 05:22:19 26 4
gpt4 key购买 nike

我有一个程序接收 DNA 字符串的文本文件,将它们拆分为 kmer 子字符串并计算唯一子字符串弹出的次数。我唯一的问题是让它识别字符串值“N”并在文件中忽略它......例如像这样的文本文件:

3 3

ACNTG

动图

动图

会将 dna 序列分成 3 个 kmers,因此是第一个整数。问题是我想忽略 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 检查字符 'N' 在字符串 kmer 中的位置。这具有逻辑意义(您正在检查 kmer 是否包含错误的 N),并且返回值确实可以与 std::string::npos 进行比较。

  • 前一个(除了 Ap31 注意到的一个额外的 ! 拼写错误),检查字符串 "N" 的位置在 unordered_map 中使用 std::unordered_map 。这没有逻辑意义(您可能没有使用 1-mers),并且返回值不能与 std::string::npos 进行比较。

关于c++ - 如何忽略无序映射/映射中的单个字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39690825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com