Я разделил текстовый файл на строку на основе целого числа k, и я хочу подсчитать, сколько раз появляется одна и та же строка. В этот момент у меня есть строка, разбитая на отдельные подстроки, но я не могу заставить неупорядоченную карту читать каждую строку и подсчитывать уникальные подстроки.Как разбить и подсчитать уникальные значения подстроки с помощью хеш-таблицы (неупорядоченная карта)?
Пробу текстовый файл выглядит как этот
3 3
ACTG
ACTG
ACTG
Если первый # 3, как долго каждая подстрока и второй 3 позволяет мне проверить, если есть, что многие строки в файле.
строка будет разделена на подстроки, которые выглядят так:
ACT, CTG,TGA,GAC... and so on.
Я пытаюсь подсчитать, сколько раз такое же значение показывает, но не могу показаться, чтобы сделать это правильно.
Моей единственной проблемой является получение файла для правильного разбиения подстрок, чтобы он действительно читал эти строки, а затем помещал их в рабочую неупорядоченную карту, которая подсчитывает, сколько раз появляется уникальное значение. Вот часть моего кода, что я испытывающим трудности с:
#include <iostream>
#include <string>
#include <fstream>
#include <unordered_map>
std::cout << s << std::endl; //reads out one long string of DNA sequence
std::string kmer = "";
//split up large string into k sized substrings
for(int i = 0; i< s.length() ; ++i){
int z= 0;
kmer = s.substr(z,k);
++z;
if (kmer.length() != k){
return 0;
}
}
std::cout << kmer << std::endl;
//unordered map to place unique values in and count if the same value shows up
std::unordered_map<std::string, int > dna;
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;
}
Спасибо так много! отлично работает, у меня просто был последний последний вопрос ... Если у меня есть письмо, которое я хотел бы игнорировать, если бы он появился в текстовом файле ... как бы я это сделал? Как и в случае, если я найду букву N в моей последовательности dna, я не хочу мешать с ACTG, как бы я игнорировать n и все еще считать уникальные значения? – goldenunicorn
Лучшим способом было бы удалить его из строк полностью с помощью 'erase'i think. – PeterK
как бы реализовать эту линию? я попытался, если (dna.find ("N")) {dna.erase ("N"); но я получаю сообщение об ошибке. – goldenunicorn