47行目: fileSave << char('\t'^ CIPHER_KEY); に変更
66行目: fileSave << char('\n'^ CIPHER_KEY); に変更
68行目: fileSave.close(); を追加
89行目: vs.push_back(loadString); に変更
90行目: loadString = "\0"; に変更
95行目: backLog.push_back(vs); vs.clear(); を追加
最後の表示は、if (j != 0) cout << '\t'; と cout << endl; を
追加したほうが見やすいでしょう。
これでどうでしょうか?
57行目の '\\' の処理の意味が分かりません。
余計なものを削除すると、次のように書けます。
コード:
#define CIPHER_KEY 12345
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
vector<vector<string>> backLog;
vector<string> backLogStr;
backLogStr.push_back("あいうえお");
backLogStr.push_back("かきくけこ");
backLogStr.push_back("さしすせそ");
backLog.push_back(backLogStr);
backLogStr.clear();
backLogStr.push_back("たちつてと");
backLogStr.push_back("なにぬねの");
backLog.push_back(backLogStr);
for (size_t i = 0; i < backLog.size(); i++) {
for (size_t j = 0; j < (int)backLog[i].size(); j++) {
if (j != 0) cout << '\t';
cout << backLog[i][j];
}
cout << endl;
}
ofstream fileSave("backLog.dat", ios::binary);
for (size_t i = 0; i < backLog.size(); i++) {
for (size_t j = 0; j < backLog[i].size(); j++) {
if (j != 0) fileSave.put('\t' ^ CIPHER_KEY);
for (size_t k = 0; k < backLog[i][j].size(); k++)
fileSave.put(backLog[i][j][k] ^ CIPHER_KEY);
}
fileSave.put('\n' ^ CIPHER_KEY);
}
fileSave.close();
ifstream ifs("backLog.dat", ios::binary);
if (!ifs) return 1;
char byte;
string loadString;
vector<string> vs;
vector<vector<string>> vvs;
while (ifs.get(byte)) {
byte = byte ^ CIPHER_KEY;
if (byte != '\t' && byte != '\n')
loadString += byte;
else {
vs.push_back(loadString);
loadString.clear();
if (byte == '\n') {
vvs.push_back(vs);
vs.clear();
}
}
}
for (size_t i = 0; i < vvs.size(); i++) {
for (size_t j = 0; j < vvs[i].size(); j++) {
if (j != 0) cout << '\t';
cout << vvs[i][j];
}
cout << endl;
}
}