2016-09-25 5 views
0

У меня есть программа, которая берет текстовый файл ДНК-строк, разбивает их на подстрочные константы и подсчитывает, сколько раз появляется уникальная подстрока. Мой единственный вопрос, имеющий это признают строковое значение «N» и игнорировать его в файл ... например, текстовый файл, например так:Как игнорировать одно строковое значение в неупорядоченной карте/карте?

ACNTG

АКТГ

ACTG

разделил бы последовательность dna на 3-километры, следовательно, первое целое число. Проблема в том, что я хочу игнорировать 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; 
} 

ответ

1

Похоже, у вас есть ошибка в строке

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

Вы, вероятно, имел в виду, чтобы быть

if(kmer.find('N') !=std::string::npos){ 
  • последний один (который я думаю, что это один вы имели в виду), проверяет позиции символа 'N' в строке kmer с использованием std::string::find. Это делает логический смысл (вы проверяете, содержит ли блок-корректор неисправный N), и действительно можно сравнить значение возвращаемого значения с std::string::npos.

  • Бывшие один (отступления от опечатка дополнительной ! на фронте, который Ap31 заметил), проверяет позицию строки "N" в unordered_map с использованием std::unordered_map. Это не имеет логического смысла (вы, вероятно, не работаете с 1-mers), а возвращаемое значение не может сравниться с std::string::npos.

+0

как вам удалось разобрать этот первый '!' В состоянии? : D +1 Это немного озадачило меня. Также эти строки выпрашивают определенный пользовательский хеш – Ap31

+1

@ Ap31 Я только что получил то, что вы сделали. Благодаря! Пока вы не подняли его, я просто этого не видел. Иногда близорукость окупается :-) –

+1

хорошо, что вы все еще могли дать правильный ответ, хотя я даже не мог понять, что должно означать это выражение. Я должен сказать, что скобки все еще не совсем скомпонованы в вашем текущем решении: D – Ap31