难道 string 类不含回车和空格符的吗?

来源:百度知道 编辑:UC知道 时间:2024/05/16 01:55:33
//源程序:
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
#include<vector>
using namespace std;
istream& qq(istream& ss);
main()
{
string file_name;
cout<<endl;
cout<<"请输入该文件名称及其路径(路径输入错误或不输入都将默认为当前程序目录:"<<endl;
cin>>file_name;
ifstream aa(file_name.c_str(),ios::in);
string ws;
vector<string> pp;
if(!aa)
{
cout<<endl;
cout<<"找不到该文件!"<<endl;
cout<<"请重新输入!"<<endl;
string ad;
cout<<"退出? 'y' or 'n'"<<endl;
cin>>ad;
if(ad=="y")
{
return 0;
}else{
main();
}
}
cout<<"文件打开成功!"<<endl;
while(!aa.eof())
{
aa>>ws;
pp.push_back(ws);
}
cout<<&qu

同意楼上,你读的方式有问题,直接用>>读的话,>>是不会去接收空格和换行的,不是vector的问题,对于空格或换行符要单独检测,参考修改如下:

if(aa.peek()=='\n'||aa.peek()==' ')
{
ws=aa.get();
pp.push_back(ws);
}
else
{
aa>>ws;
pp.push_back(ws);
}

另外,我注释了的这部分这样写是要让输出的时候多空一行还是什么意思呢?没看懂……
for(vector<string>::iterator qs=pp.begin();qs!=pp.end();++qs)
{
//if(pp[io]=="\n"){
// uu<<"\n";}
//if(pp[io]==" "){
// uu<<" ";}
uu<<pp[io];
++io;
}

还有问题,输入错误以后想重输,怎么成了递归调用main函数了,你自己试试这时候的结果是你预期的不是,最好改成循环加判断处理输入错误,我要一直输错下去你得递归调用多少次main函数啊……

——————————————————————

要想完全复制的话还是一个字符一个字符的处理好一些,无论在效率上还是稳定性上。
也就是说容器用char类型,然后读取的时候用get():
while(!aa.eof())
{
pp.push_back(aa.get());
}

读的方式有问题,一般都用getline()之类的....试试吧.至于你说的那个,string中应该有回车和空格.具体的我也不大清楚...
祝你