我正在制作一个移位密码,从文件中读取文本并对其进行解码。解密工作正常,但是我无法弄清楚如何找到文件的长度而不将其硬编码为字符数组的大小。它还只读取一行,任何带有换行符的内容都会损坏。
任何帮助将不胜感激,我省略了主要的代码块,因为它在读入数组后处理数组,并且看起来有点长且无关紧要。
string fileName;
cout << "Please enter the locations of your encrypted text (e.g ""encryptedText.txt""): ";
getline( cin, fileName );
char encryptedMessage[446]; //How do i read in the file length and declare the array size as a variable instead of [446]?
char decryptedMessage[446];
ifstream in(fileName);
if(in.get(encryptedMessage, 446))
{
[my decrypting code]
}
else
{
cout << "Couldn't successfully read file.\n";
}
system("pause");
好吧,将整个文件读入动态大小的字符数组(不要使用静态大小的数组)的简单单行将是:
#include <vector>
#include <iterator>
std::vector<char> encryptedMessage(std::istreambuf_iterator<char>(in),
std::istreambuf_iterator<char>());
不要自己搞动态分配,只要让std::vector
做好它的工作。由于其优化的增长行为,您实际上不需要费心检查文件大小。在必要时或至少在文件超过几百个字符之前不要优化速度。当然还有istreambuf_iterator
(代替istream_iterator
)不处理任何特殊的空白,它只是从文件中一一获取每个原始字符。
您可以对 a 执行相同的操作std::string
代替std::vector<char>
,但我不确定它的增长行为(也许它总是用一个元素重新分配数组)。但话又说回来,当文件包含 400 个字符时谁会关心速度呢?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)