C++-练习c++中的流时遇到的问题

发布于 2016-11-24 00:01:58 字数 1532 浏览 1344 评论 1

看完c++ primer 第八章后 自己做了个练习,练习的目的是,从文件中读入 string,然后对这些string 重新排序,最后再输入另外的一个文件,程序如下:

bool isSort( const std::string &a, const std::string &b )
{
//return a.length() >= b.length();
return (a.size()) > (b.size());
}
int main( int argc,char **argv )
{
if ( argc < 2 )
{
printf("Input err please enter fileNamen");
return -1;
}
const std::string ifile(argv[1]);
std::ifstream input;
input.open(ifile.c_str());
if ( !input )
{
printf("Input file maybe err please check file name :%sn",ifile.c_str());
return -1;
}
std::string lineString;
std::stringstream ss2;
std::vector< std::string > stringVec;
while ( std::getline(input,lineString) )
{
std::stringstream ss(lineString);
std::string temp;
while ( ss >> temp )
{
stringVec.push_back(temp);
}
}
//stringVec[0].size()>= stringVec[1].size();
std::stable_sort(stringVec.begin(),stringVec.end(),isSort);

std::ofstream ofile("2.txt");

if (!ofile)
{
printf("Out put file errn");
return -1;
}
std::vector< std::string >::iterator iterVec = stringVec.begin();
for (;iterVec!=stringVec.end();iterVec++)
ofile << *iterVec<<" ";
ofile<<std::endl;
return 1;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜无邪 2017-05-27 15:45:47

stable_sort 这个函数是稳定排序,即两个操作数要是相等的话,不调换位置。
但是你写isSort函数的时候,如果加上等号的话,意思就变成了“如果两个操作数相等也要调换位置”,这从逻辑上就违反了稳定排序的意图。你可以试验一下sort函数会怎样。
至于最直接的证据,还得看stable_sort函数的内部实现。但是依据上面的分析,已经可以肯定到7 8分的程度了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文