#include <fstream>
int main()
{
// compress
std::ifstream inFile("test.input");
std::ofstream outFile("test.compressed");
char c;
while(inFile >> c)
outFile << c + 1;
// decompress
std::ifstream inFile2("test.compressed");
std::ofstream outFile2("test.output");
while(inFile2 >> c)
outFile2 << c - 1;
// close
inFile.close();
outFile.close();
inFile2.close();
outFile2.close();
return 0;
}
这是我的代码。可能有一些我无法理解的东西,因为对我而言,test.input
应与test.output
相同,但他们并非如此。
答案 0 :(得分:3)
这里有两个问题。首先,当您从char
添加(或减去)int
时,结果为int
。因此,计算c + 1
将被写为test.compressed
的数字(例如,'a'
的ASCII代码为97
。因此,在向1
添加98
后,您需要获取'9'
,它将作为字符'8'
和char
)写入文件。然后从这些字符中减去1,显然不会得到相同的输出。这可以通过将结果强制转换为#include <fstream>
int main()
{
// compress
std::ifstream inFile("test.input");
std::ofstream outFile("test.compressed");
char c;
while(inFile >> c)
outFile << (char)(c + 1); // Casting to char
// Close the files you're done with
inFile.close();
outFile.close();
// decompress
std::ifstream inFile2("test.compressed");
std::ofstream outFile2("test.output");
while(inFile2 >> c)
outFile2 << (char)(c - 1); // You need the cast here too
// Close the files you're done with
inFile2.close();
outFile2.close();
return 0;
}
来解决。
第二个问题更加平淡无奇 - 您在刷新之前尝试从您写入的文件中读取,因此您可能会遗漏您编写的部分(或全部)数据。这可以通过在完成文件后关闭文件来解决,这通常是一种很好的做法。
把它们放在一起:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.list_users:
//Toast.makeText(MainActivity.this, "List", Toast.LENGTH_SHORT).show();
setContentView(R.layout.user_list);
List("OD12");
return true;
case R.id.list_users2:
setContentView(R.layout.user_list);
List("OD14");
return true;
case R.id.homepage:
startActivity(new Intent(MainActivity.this,MainActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}