快速业务通道

STL学习系列之二:标准模板库(STL)介绍

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
public:
  bool operator () (string& PossibleFlag) {
    return PossibleFlag.substr(0,1)=="-";
  }
};
class IsAFileName {
public:
  bool operator () (string& StringToCheck) {
    return !IsAFlag()(StringToCheck);
  }
};
class IsHelpFlag {
public:
  bool operator () (string& PossibleHelpFlag) {
    return PossibleHelpFlag=="-h";
  }
};
void main (int argc, char *argv[]) {
  list<string> CmdLineParameters; // the command line parameters
  list<string>::iterator StartOfFiles; // start of filenames
  list<string> Flags; // list of flags
  list<string> FileNames; // list of filenames
  for (int i = 0; i < argc; ++i) CmdLineParameters.push_back(argv[i]);
    CmdLineParameters.pop_front(); // we don''t want the program name
  // make sure we have the four mandatory file names
  int NumberOfFiles(0);
  count_if(CmdLineParameters.begin(), CmdLineParameters.end(), IsAFileName(), NumberOfFiles);
  cout << "The " << (NumberOfFiles == 4 ? "correct " : "wrong ") << "number (" << NumberOfFiles << ") of file names were specified" << endl;
// move any flags to the beginning
  StartOfFiles = stable_partition(CmdLineParameters.begin(), CmdLineParameters.end(), IsAFlag());
  cout << "Command line parameters after stable partition" << endl;
  for_each(CmdLineParameters.begin(), CmdLineParameters.end(), PrintIt);
  // Splice any flags from the original CmdLineParameters list into Flags list.
  Flags.splice(Flags.begin(), CmdLineParameters, CmdLineParameters.begin(), StartOfFiles);
  if (!Flags.empty()) {
    cout << "Flags specified were:" << endl;
    for_each(Flags.begin(), Flags.end(), PrintIt);
  }
  else {
    cout << "No flags were specified" << endl;
  }
  // parameters list now contains only filenames. Splice them into FileNames list.
  FileNames.splice(FileNames.begin(), CmdLineParameters, CmdLineParameters.begin(), CmdLineParameters.end());
  if (!FileNames.empty()) {
    cout << "Files specified (in order) were:" << endl;
    for_each(FileNames.begin(), FileNames.end(), PrintIt);
  }
  else {
    cout << "No files were specified" << endl;
  }
  // check if the help flag was specified
  if (find_if(Flags.begin(), Flags.end(), IsHelpFlag())!=Flags.end()) {
    cout << "The help flag was specified" << endl;
  }
  // open the files and do whatever you do
}

给出这样的命令行:

//zbf:在vc6IDE下可以模拟出一样的结果

test17 -w linux -o is -w great

输出是:

The wrong number (3) of file names were specified
Command line parameters after stable partition
-w
-o
-w
linux
is
great
Flags specified were:
-w
-o
-w
Files specified (in order) were:
linux
is
great

18 结论

我们仅仅简单的谈了谈你可以

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号