Простой способ проверки аргументов командной строки - PullRequest
2 голосов
/ 05 февраля 2009

Как проверить, содержит ли argv (вектор аргумента) символ, то есть: A-Z

Хотелось бы убедиться, что argv содержит только беззнаковые интергеры

Например:

if argv[1] contained "7abc7\0" - ERROR

if argv[1] contains "1234\0" - OK

Ответы [ 4 ]

5 голосов
/ 05 февраля 2009
 bool isuint(char const *c) {
   while (*c) {
     if (!isdigit(*c++)) return false;
   }
   return true;
 }

 ...
 if (isuint(argv[1])) ...

Дополнительная проверка ошибок может быть выполнена для пустого указателя c и пустой строки, если необходимо.

обновление : (добавлено недостающее c ++)

1 голос
/ 05 февраля 2009

Как насчет этого:

const std::string numbers="0123456789";

for(int i=1; i<argc; i++) {
  if(std::string(argv[i]).find_first_not_of(numbers)!=std::string::npos)
    // error, act accordingly
    ;
}
0 голосов
/ 05 февраля 2009

Гораздо более гибкий подход (т. Е., Вероятно, больше, чем то, о чем вы спрашиваете в своем вопросе), но все еще очень прост в использовании - это использование getopts , которое является частью libc

0 голосов
/ 05 февраля 2009

http://www.dreamincode.net/code/snippet591.htm

#include <iostream>
#include <limits>

using namespace std;

int main() {
  int number = 0;
  cout << "Enter an integer: ";
  cin >> number;
  cin.ignore(numeric_limits<int>::max(), '\n');

  if (!cin || cin.gcount() != 1)
    cout << "Not a numeric value.";
  else
    cout << "Your entered number: " << number;
  return 0;
}

Изменено, конечно, для работы с argv вместо cin.

Это может быть не совсем то, что вы хотите - запустите несколько тестов и проверьте вывод, если вы не понимаете, что он делает.

-Adam

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...