参数 - 命令提示c ++

时间:2013-06-05 02:21:32

标签: c++

所以我正在尝试完成程序的一部分,我必须在向量字符串中找到最后的n-1个单词,并将源中的下一个单词移动到向量字符串的末尾。在这里,我正在尝试为'findAndShift'编写函数,并使用其他程序中的参数来使用它。

这是我对该计划的一部分。

void findAndShift(vector<string>& ngram, string source[],int sourceLength) {
    if (argc == 2)///default command prompt...not declared?
    {
        ifstream infile;
        infile.open(argv[1], ios::in);
        if (infile.fail())
        {
            cout << argv[0] << ": "<< argv[i] << "I'm afraid I can't let you do that, Dave." << endl;
        }
        else
        {
            //get length of n
            infile.seekg(0, ios::end);
            const int sourceLength = infile.tellg();

            int n = 0;
            string word;
            ngram = rand() % sourceLength;
            while (!infile.eof())
            {
                infile >> source;
                ++n;
                if(counter == ngram);
                    word = n;
            }
        }
    }
    return;
}

这是我必须使用的程序。

 string source[250000];
 vector<string> ngram;
 int main(int argc, char* argv[]) {
     int n, outputN, sl;
     n = 3;
     outputN = 100;
     for (int i = 0; i < argc; i++) {
         if (string(argv[i]) == "--seed") {
             srand(atoi(argv[i+1]));
         } else if (string(argv[i]) == "--ngram") {
             n = 1 + atoi(argv[i+1]);
         } else if (string(argv[i]) == "--out") {
             outputN = atoi(argv[i+1]);
         } else if (string(argv[i]) == "--help") {
            help(argv[0]);
            return 0; }
     }
     fillWordList(source,sl);
     cout << sl << " words found." << endl;
     cout << "First word: " << source[0] << endl;
     cout << "Last word:  " << source[sl-1] << endl;
     for (int i = 0; i < n; i++) {
         ngram.push_back(source[i]);
     }
     cout << "Initial ngram: ";
     put(ngram);
     cout << endl;
     for (int i = 0; i < outputN; i++) {
         if (i % 10 == 0) {
             cout << endl;
         }
         //put(ngram);
         //cout << endl;
         cout << ngram[0] << " ";
         findAndShift(ngram, source, sl);
     } }

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你必须在程序argc和argv []中传递更多参数,因为argc只是main函数的一个参数,因此在其他函数中不可见。

这是您修改后的代码。

void findAndShift(vector<string>& ngram, string source[],int sourceLength, int argc, char argv[0], argv[1],argv[i]){
    if (argc == 2)///default command prompt...not declared?
    {
        ifstream infile;
        infile.open(argv[1], ios::in);
        if (infile.fail())
        {
            cout << argv[0] << ": "<< argv[i] << "I'm afraid I can't let you do that, Dave." << endl;
        }
        else
        {
            //get length of n
            infile.seekg(0, ios::end);
            const int sourceLength = infile.tellg();

            int n = 0;
            string word;
            ngram = rand() % sourceLength;
            while (!infile.eof())
            {
            infile >> source;
            ++n;
            if(counter == ngram);
             word = n;
            }
        }
    }
    return;
}

您的主要代码

string source[250000];
 vector<string> ngram;
 int main(int argc, char* argv[]) {
   int n, outputN, sl;
   n = 3;
   outputN = 100;
   for (int i = 0; i < argc; i++) {
     if (string(argv[i]) == "--seed") {
       srand(atoi(argv[i+1]));
     } else if (string(argv[i]) == "--ngram") {
       n = 1 + atoi(argv[i+1]);
     } else if (string(argv[i]) == "--out") {
       outputN = atoi(argv[i+1]);
     } else if (string(argv[i]) == "--help") {
       help(argv[0]);
 return 0; }
   }
   fillWordList(source,sl);
   cout << sl << " words found." << endl;
   cout << "First word: " << source[0] << endl;
   cout << "Last word:  " << source[sl-1] << endl;
   for (int i = 0; i < n; i++) {
     ngram.push_back(source[i]);
   }
   cout << "Initial ngram: ";
   put(ngram);
   cout << endl;
   for (int i = 0; i < outputN; i++) {
if (i % 10 == 0) {
  cout << endl;
}
//put(ngram);
//cout << endl;
cout << ngram[0] << " ";
findAndShift(ngram, source, sl, argc,argv[0],argv[1],argv[i]);
 } }

我还没有测试过。 如果仍然无效,请尝试在findAndShift的参数列表中使用char *

希望它有所帮助......

相关问题