如何将 .txt 文件中的特定整数存储在结构数组中?
Posted
技术标签:
【中文标题】如何将 .txt 文件中的特定整数存储在结构数组中?【英文标题】:How to store specific integers from a .txt file in an array of structures? 【发布时间】:2015-12-09 00:14:24 【问题描述】:在名为“data.txt”的文件中包含 1-4 的数字(例如 2 1 2 4 1 3...)。我需要阅读这些数字并创建每个包含 100 个数字的字符串。之后我需要计算每个字符串中有多少个 1、2、3 和 4。这是我目前所拥有的:
//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();
目前这个程序所做的就是从文件中读取所有数据。我不知道如何从这里继续。
【问题讨论】:
while 循环应该是您获取 100 位数字字符串的地方,但它现在没有做任何事情。至于其余的,取决于您打算如何处理计数和 100 位字符串。numbers
变量看起来更像您希望“存储”的行为方式。尝试将numbers
的类型更改为容器(如std::vector
)并从那里移动。
while(!inFile.eof())
几乎从不工作。 Read more here。在这种情况下,这是错误的,会导致您读取文件末尾并在数字中放置一些未知值。
【参考方案1】:
在 C++ 中,您经常需要使用循环来重复某个动作若干次。在您的情况下,我相信您可以从 for 循环中受益。下面是一个循环示例,它将读取 100 个整数并将每个整数存储到数组中靠近 main 开头的位置:
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 处。
【讨论】:
【参考方案2】:从一个从文件中读取数字的非常简单的程序开始。
只需阅读它们。不要解释它们,因为在你能证明它们被正确读取之前,试图对这些数字做任何事情是没有意义的。所有额外的代码都会混淆确保您正确阅读并隐藏错误位置的水域。
vector<int> readFile()
vector<int> numbers;
为什么是矢量?因为这是存储未知数量条目的最简单方法。此时不要玩更复杂的结构,也不要尝试自己动手。如果教练说,“没有矢量”哦,好吧。但那是你交的东西。你用来证明算法有效的东西是另一回事。
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
s 的末尾时,析构函数将触发并为我们执行此操作。
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 字符串中。
【讨论】:
以上是关于如何将 .txt 文件中的特定整数存储在结构数组中?的主要内容,如果未能解决你的问题,请参考以下文章