在名为" data.txt"的文件中有1-4的数字。 (例如2 1 2 4 1 3 ......)。我需要读取这些数字并创建每个100个数字的字符串。之后我需要计算每个字符串中有多少1s,2s 3s和4s。这就是我到目前为止所做的:
//structure
struct DNAnt
{
int a, c, g, t;
string strand;
};
void data2DNA();
//main
int _tmain(int argc, _TCHAR* argv[])
{
data2DNA();
cin.get();
return 0;
}
//function
void data2DNA()
{
DNAnt DNAstrand[100];
ifstream inFile;
int numbers;
inFile.open("data.txt");
if(inFile.is_open())
{
while(!inFile.eof())
{
inFile >> numbers;
}
}
else
cout << "ERROR!";
inFile.close();
}
此刻所有程序都会读取文件中的所有数据。我不知道如何从这里继续。
答案 0 :(得分:0)
通常在C ++中,您需要使用循环来重复动作若干次。在你的情况下,我相信你可以从for循环中受益。下面是一个循环示例,它将读取100个整数并将每个整数存储到数组中您在主要开头附近的位置:
int i;
for(i = 0; inFile && i < 100; ++i) { //i will range from 0 to 99
inFile >> DNAstrand[i];
}
//now use DNAstrand to do stuff
我说inFile &&
的原因是为了确保inFile不在eof。
答案 1 :(得分:0)
从一个非常简单的程序开始,该程序从文件中读取数字。
请阅读它们。不要解释它们,因为没有必要尝试对这些数字做任何事情,直到你能证明它们被正确读出。所有额外的代码都可以确保您正确阅读并隐藏错误的位置。
vector<int> readFile()
{
vector<int> numbers;
为何选择矢量?因为这是存储未知数量条目的最简单方法。此时不要玩更复杂的结构,也不要尝试自己动手。如果教练说,&#34;没有矢量&#34;那好吧。但这就是你提交的内容。用来证明算法有效的是另一个故事。
ifstream inFile("data.txt");
这也会打开文件,以便您以后不必这样做
if(inFile.is_open())
{
int number;
while(inFile >> number)
这读入一个int。如果由于任何原因它无法读取int,它将停止并离开循环。如果文件格式不正确并且包含无法转换的数据,我们就在这里。如果它到达文件的末尾,我们就会离开这里。
{
numbers.push_pack(number);
否则,我们将读取的数字放入矢量中。
}
}
else
{
cout << "ERROR opening file";
)
不需要关闭该文件。当我们点击函数inFile
的结尾时,析构函数将会触发并为我们执行。
return numbers;
然后将向量发送回调用者,以便他们可以使用它,但他们认为合适。这里可以发生一系列有趣的事情,以防止矢量被复制,因此不必担心它。
}
所有在一起:
void data2DNA()
{
vector<int> numbers;
ifstream inFile("data.txt");
if(inFile.is_open())
{
int number;
while(inFile >> number)
{
numbers.push_pack(number);
}
}
else
{
cout << "ERROR opening file";
)
return numbers;
}
现在您已掌握了数据,您可以继续将其转化为一串核酸。
对于这部分,我将推荐一个数组
const char tags[] = {'-', 'A', 'C', 'G', 'T'};
索引1到4是A,C,G和T,因此tags[2]
将提供'C'
。这使得从数字转换为标签非常容易。
一旦有标签,就可以将其附加到DNA字符串中。