清高手帮忙改正一下
我是一个C++菜鸟,现在正在编写一个关于空白压缩的程序,可是最后老是达不到题目的要求!题目的要是: 采用最简单的“空白压缩法”,即压缩一段文本中的连续空格。例如:
源数据流:
X Y Z Q R S
压缩后的数据流:
X Y Z Sc 4 Q R S
Sc代表压缩指示字符,还原时,扫描到有此字符,均按紧跟其后的数字恢复相应长度的空格序列,其余字符原样输出。
如何选取压缩指示字符?在ASCII码,除字母、数字、符号外,还有一些扩展码,它们属于不可显字符,可以采用其中之一作为压缩指示符。如ASCII码为0的NUL。
写了好几天了,可是实在不知道自己的错误在什么地方!所以请哪位好心的大虾帮忙改改,谢谢!!!
#include<fstream>
#include<iostream>
using namespace std;
void CompressedFiles();
void DecompressedFiles();
void main( )
{
int c;
while(1)
{
//输出选择菜单
cout<<"***********************************************"<<endl;
cout<<"1.压缩"<<endl;
cout<<"2.解压"<<endl;
cout<<"3.退出"<<endl;
cout<<"***********************************************"<<endl;
cin>>c; //录入选择结果
//判断用户输入并执行相应操作,即调用调用相应的函数
if(c==1)
CompressedFiles();
if(c==2)
DecompressedFiles();
if(c==3)
break;
if(c!=1&&c!=2&&c!=3) //防止输入错误
continue;
}
}
/*参数:无
返回值:无
函数功能:用"空白压缩法"实现对指定文件的压缩*/
void CompressedFiles()
{
char ch;
int n=1;
char name[20],newname[30];
char fname[]={"x"},address[]={"d:\\文件压缩管理\\"};
char iaddress[100],oaddress[100];
cout<<"要压缩的文件需放在“d:\\文件压缩管理\\”目录下。"<<endl;
cout<<"请输入要压缩的文件名。"<<endl;
cin>>name;
strcpy(newname,fname);
strcat(newname,name);
strcpy(iaddress,address);
strcat(iaddress,name);
strcpy(oaddress,address);
strcat(oaddress,newname);
ifstream ifile(iaddress);
if(!ifile)
{
cout<<name<<" cannot be open!"<<endl;
return;
};
ofstream ofile(oaddress);
if(!ofile)
{
cout<<newname<<" cantnot be opened!"<<endl;
return;
};
while (ifile.get(ch))
{
if(ch>=33&&ch<=126)
ofile.put(ch);
if(ch==32)
{
ifile.get(ch);
while(ch==32)
{
n++;
ifile.get(ch);
};
if(n==1)
{
ofile.put(32);
ofile.put(ch);
};
if(n>=2)
{
n=n+48;
ofile.put(24);
ofile.put(n);
ofile.put(ch);
};
};
}
ifile.close();
ofile.close();
cout<<"文件已压缩完成。"<<endl;
};
/*参数:无。
返回值:无。
函数功能:实现对指定文件的解压缩。*/
void DecompressedFiles()
{
char ch;
int n;
char name[20],newname[30];
char fname[]={"解压缩"},address[]={"d:\\文件压缩管理\\"};
char iaddress[100],oaddress[100];
cout<<"要解压缩的文件需放在“d:\\文件压缩管理\\”目录下。"<<endl;
cout<<"请输入要解压缩的文件名。"<<endl;
cin>>name;
strcpy(newname,fname);
strcat(newname,name);
strcpy(iaddress,address);
strcat(iaddress,name);
strcpy(oaddress,address);
strcat(oaddress,newname);
ifstream ifile(iaddress);
if(!ifile)
{
cout<<name<<" cannot be open!"<<endl;
return;
};
ofstream ofile(oaddress);
if(!ofile)
{
cout<<newname<<" cantnot be opened!"<<endl;
return;
};
while (ifile.get(ch))
{
if(ch>=32&&ch<=126)
ofile.put(ch);
if(ch==24)
{
ifile.get(ch);
n=(int)ch;
for(int i=1;i<=n;i++)
{
ofile.put(32);
}
};
}
ifile.close();
ofile.close();
cout<<"文件已解压缩完成。"<<endl;
};