gpt4 book ai didi

C++ 写入损坏的文本文件

转载 作者:行者123 更新时间:2023-11-28 02:46:21 30 4
gpt4 key购买 nike

我有根据此 [pdf] 加密数据的代码。 1我遇到的问题是代码产生了正确的输出。当我“cat”输出文件时,我得到了正确的答案,但是如果我在文本编辑器中打开文件,我得到的结果如下所示:

0068 6e74 7264 727a 0073 7558 6569 79650061 6779 686f 6570 0064 6d62 6465 63580074 7265 6568 6168 0075 7058 5862 74690065 6e72 6d65 676c 0073 6377 6864 6e6f0073 6d6e 7479 7465 006c 6775 5869 6561

The expected output is:

 hntrdrzsuXeiyeagyhoepdmbdecXtreehahupXXbtienrmeglscwhdnosmntytelguXiea

using this string as the original argument and the Keys: CORNFLAKES and BLACKHORSE

sendresupplytothebridgebythechurchXXammoneededurgentlywithmagazinesXXX

is this a memory issue, is my stream failing? I feel like I'm overlooking something I just can't see what.

this is how it encrypts:

string encrypt(string &key, string &toEncrypt)
{
int height= 1;
string result = "";

vector<vector<char> > matrix(key.length(), vector<char>(2));

string::iterator it=toEncrypt.begin();

for (int i = 0; i < key.length(); i++)
{
matrix[i][0] = key.at(i);
}


// put info into matrix
printf("%s\n", key.c_str());
while( it!=toEncrypt.end()) // while string still has more chars
{
//printf("newline----\n");
for (int col = 0; col < key.length(); col++,it++)
{
if (it != toEncrypt.end())
{
if(*it == '\0'){it++;}
matrix[col].push_back(*it);
printf("%c", *it);
continue;
}
if(col < key.length())
matrix[col].push_back('X');
printf("%c", 'X');

}
height++;
printf("\n");
}
//parse trough the matrix
printf("\n");
BubbleSort(matrix);
printf("\n");

printf("PAST BUBBLE SORT\n");
for (int c = 0; c < key.length(); c++)
{
for (int r= 1; r < matrix[0].size(); r++)
{
result += matrix[c][r];
printf("%c",matrix[c][r]);
}
printf("\n");
}


printf("THE RESULT IS%s\n", result.c_str());
return result;
}

这是我写入文件的方式:

string file = "\0";
printf("Please Enter the name of the file that contains the text to be encrypted with the extention.\n");
getline(cin, file, '\n');

string line;
string encrypted;

transposition_encr encryptor = transposition_encr(k1,k2);

ifstream myfile (file.c_str());
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
encrypted += line;
}

myfile.close();

}
else
{
cout << "Unable to open file\n";
return -1;
}

cout << encrypted << endl;
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

cout<< encrypted << endl;
encrypted = encryptor.encryption(line);
cout<< encrypted << endl;

string str = "outputfile-encrypted-str.txt";
ofstream myfile2(str.c_str());
if (myfile2.is_open())
{
myfile2 << encrypted;
myfile2.close();
}
// else cout << "Unable to open file\n";

这是一个link代码

最佳答案

你开始于

vector<char>(2)

作为 matrix 中的默认元素,然后 push_back() 到那些元素。最后,你用

丢弃第一个
for (int r= 1; r < matrix[0].size(); r++)

但这仍然会给您留下一个空字节。您可能想从一个空 vector 开始并使用它的所有元素。

关于C++ 写入损坏的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24277321/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com