2017-06-16 7 views
-3

私はATGCCAのような文字列を持っています。 この文字列は[ATG CCA ...]のようにcharの配列に変換されます。 私はすでにATG = 1とCCA = 2を知っていますが、これを二重と定義しています。変換された行列を二重に保存するにはどうすればよいですか? ここに私のプログラムは今ですが、それは動作しません:文字をdoubleとcharの両方として使用できますか?

ATG 1 
CCA 2 

しかし、私が見ることは次のとおりです:

ATG 0 
CCA 0 

感謝

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 
#include <cstdlib> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 

using namespace std; 

int main() { 
double ATG=1, CCA=2; 

fstream fp("sequence.txt",ios::in); 
if(!fp) 
{ 
    cerr<<"File can not open!"<<endl; 
    exit(1); 
} 

char content,k,l,m; 
char a[4]=""; 
double n; 

while(fp>>k>>l>>m){ 
fp.read(a, sizeof(a) - 1); 
    n=atof(a); 
    cout<<a<<" "<<n<<endl; 
} 
} 

私は出力としてこれを見ることを期待しますあなたの助けをあなたに!

+1

を参照してください、/マップのペアのキーのarrayを使用する必要がある場合があります= 2 "_うわー、どうか? –

+0

'n = atof(a);':このようには動作しません。文字列比較を使用する必要があります。関連する関数は、 'string.h'またはより良い[' cstring'](http://en.cppreference.com/w/cpp/header/cstring)にあります。一般的には、 'char *'や 'char []'の代わりに['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string)を使うことをお勧めします。 'std :: string'は、(サブ)文字列を見つけたり比較したりするメソッドを提供します。 – Scheff

+0

なぜ 'n = atof(a)'がa = 'ATG'ならあなたに1を与えるべきですか? – Walter

答えて

1

あなたが"ATG"ある文字列を、読んでいるようだ、とあなたはatofは、その値を抽出するから、変数の名前としてそれを使用することを期待しています。その推論には連鎖的な誤りがいくつかあります。あなたはintの代わりにdouble Sを使用する場合があります

#include <map> 
#include <string> 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main() { 
    map<string, double> amino; 
    amino["ATG"] = 1; 
    amino["CCA"] = 2; 
    // ... Complete with the other 62 codons 

    fstream fp("sequence.txt",ios::in); 
    if(!fp) 
    { 
     cerr<<"File can not open!"<<endl; 
     exit(1); 
    } 

    char content, k, l, m; 
    char a[4]=""; 
    double n; 

    while(fp >> k >> l >> m) { 
    fp.read(a, sizeof(a) - 1); 
     n = amino[a]; 
     cout << a << " " << n << endl; 
    } 

    return 0; 
} 

注:

あなたはmap(ないテストコード)のようなものが必要になります。 おそらく、読み込まれた配列が実際にコドンであることを確認するためのチェックがあります。

あなたは「私はすでにそのATG = 1とCCAを知っている_

unsigned char array as key in a map (STL - C++)

Character Array as a value in C++ map

Using char* as a key in std::map

+0

Sanchoさん、ありがとうございました。 本当に助かりました。 –

4

ATGとCCAはあなたが読んで任意の文字になるようには関係を持っていない変数が。

おそらく、ダブルスに文字列を関連付ける、あなたがAssociative Containerが必要になるため、例えばstd::map<std::string, double>

#include <iostream> 
#include <fstream> 
#include <string> 

int main() { 
    std::map<std::string, double> lookup = { { "ATG", 1}, { "CCA", 2 } }; 

    std::fstream fp("sequence.txt",std::ios::in); 
    if(!fp) 
    { 
     std::cerr<<"File can not open!"<<std::endl; 
     exit(1); 
    } 

    char content,k,l,m; 
    char a[4]=""; 
    double n; 

    while(fp>>k>>l>>m){ 
    fp.read(a, sizeof(a) - 1); 
     n=lookup[a]; 
     std::cout<<a<<" "<<n<<std::endl; 
    } 
} 
+0

Caleth、ありがとう、 はい、まさに、私はダブルスに弦を関連づけたかったのです。 –

関連する問題