加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 自定义命令行参数

发布时间:2020-12-16 09:31:56 所属栏目:百科 来源:网络整理
导读:我的命令行参数有问题.我完成了程序,所以我可以从命令行启动它: program.exe test.txt copy_test.txt 基本上,我的程序执行以下操作: 输入一些文本文件 对其进行排序并复制到新的文本文件 但是(总是这样但是?!),我应该从命令行启动程序,如下所示: progra
我的命令行参数有问题.我完成了程序,所以我可以从命令行启动它:

program.exe test.txt copy_test.txt

基本上,我的程序执行以下操作:

>输入一些文本文件
>对其进行排序并复制到新的文本文件

但是(总是这样但是?!),我应该从命令行启动程序,如下所示:

program.exe -input=test.txt -output=copy_test.txt

我不知道该怎么做.我研究过,但我没有找到任何帮助:(

请回复.

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

int main ( int argc,char* argv[])
{
 ifstream in(argv[1]);
 ofstream out(argv[2]);
 vector <string> sV;
 string line;
 while (in >> line)
  sV.push_back(line);
 for ( int i = 0; i < sV.size(); i++)
 sort ( sV.begin(),sV.end () );
 for ( int i = 0; i < sV.size(); i++)
 out << sV[i] << endl;
 cin.get();
 return 0;
}

解决方法

好吧,使用新的格式参数,您不能只是按原样将它们传递给流构造函数.

您必须检查它们是否以特定字符串开头,例如使用strncmp,然后传递相关位的地址,例如argv [1] 8作为输入类型.

由于您提供了–input = type前缀,因此您可能还希望处理它们可能处于其他顺序的可能性.

例如,您可以替换:

int main (int argc,char* argv[]) {
    ifstream in(argv[1]);
    ofstream out(argv[2]);

有类似的东西:

int main (int argc,char* argv[]) {
    char *infile = 0;
    char *outfile = 0;
    for (int i = 1; i < argc; i++) {
        if (strncmp (argv[i],"--input=",8) == 0) {
            infile = argv[i] + 8;
        } else {
            if (strncmp (argv[i],"--output=",9) == 0) {
                outfile = argv[i] + 9;
            } else {
                std::cerr << "Invalid argument [" << argv[i] << "]" << std::endl;
                return -1;
            }
        }
    }
    if ((infile == 0) || (outfile == 0)) {
        std::cerr << "Need to specify input and output file" << std::endl;
        return -1;
    }

    ifstream in(infile);
    ofstream out(outfile);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读