是否可以将字符用作double和char?

时间:2017-06-16 10:31:12

标签: c++

我有像ATGCCA这样的字符串.... 该字符串将转换为[ATG CCA ...]的char数组。 我已经知道ATG = 1且CCA = 2,我已将它们定义为double。如何将转换后的矩阵保存为double? 这是我的程序,但它不起作用:

#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;
}
}

我希望将此视为输出:

ATG 1
CCA 2

但我看到的是:

ATG 0
CCA 0

感谢您的帮助!

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:1)

您似乎正在读取一个字符串"ATG",并且您希望atof将其用作提取其值的变量的名称。在这种推理中有几个链式的错误。

您需要类似map(代码未经过测试)的内容:

#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;
}

请注意,您可能希望使用int而不是double s。 也许一些检查以确保序列读取实际上是密码子。

您可能需要/想要使用array作为地图对的键,请参阅

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