私は整数kに基づいてテキストファイルを文字列に分割し、同じ文字列が何回ポップアップしたのかをカウントしたいと思います。現時点では、文字列を別々の部分文字列に分割していますが、各文字列を読み込んで一意の部分文字列を数えないように順序付けられていないマップを取得することはできません。ハッシュテーブル(順序付けられていないマップ)を使用して一意の部分文字列値を分割してカウントする方法は?
サンプルテキストファイルは、最初の3位は、ファイル内のその多くの行があるなら、私に確認することができますどのくらいの各部分があり、第二3である。この
3 3
ACTG
ACTG
ACTG
ようになります。
文字列は次のようになりストリングに分割されます:
ACT, CTG,TGA,GAC... and so on.
私は、同じ値が現れる回数をカウントするようにしようとしていますが、それを適切に行うように見える傾けます。
私の唯一の2つの問題は、実際にそれらの文字列を読み込んで、一意の値が何回表示されるかを数えた作業中の順序付けられていないマップに配置するように、ここで私が問題を抱えています私のコードの一部です:
#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;
}
をありがとうございました!完璧に働いています。私はちょうど最後にすばやい質問をしました...テキストファイルに来たら無視したいという手紙があれば、どうすればいいですか?私がACTGで途中で取りたいと思っていないdnaシーケンスの文字Nを見つけた場合、nを無視して独自の値をどのようにカウントすればよいのでしょうか? – goldenunicorn
文字列から完全に削除するのが、 'erase'iと思うと良いでしょう。 – PeterK
どうすればその行を実装できますか?私は(dna.find( "N")){dna.erase( "N");しかし、私はエラーが発生します。 – goldenunicorn