Привет всем.
Есть необходимость парсить строку следующего вида: -f 1000 -d 10 -f 90
Необходимо такую строку спарсить (независимо от расположения аргументов), проверить значения параметров на корректность (например, это должны быть натуральные числа), и присвоить определенным переменным в коде.
Будет что-то вроде запуска с аргументами. Естественно, параметры могут быть записаны в случайном порядке, могут быть пропущены (тогда будет установлено значение по умолчанию). Понимаю, что нужно смотреть в сторону sscanf
и регулярных выражений, но может быть у кого-нибудь уже есть готовый код. Строка записана в буффер. Спасибо.
если данная строка передается через аргументы командной строки, то все уже давно придумано. Для этого есть функции getopt(), getopt_long(); https://www.ibm.com/developerworks/ru/library/au-unix-getopt/
В gcc (и в mingw тоже) для этих целей есть вполне стандартные функции: getopt()
, getopt_long()
, getopt_long_only()
. Почитать про них можно хотя бы здесь. Для случая Visual Studio, наверное, можно взять этот вариант. Правда, последнего мне нашел гугль, а сам я не пробовал его использовать (я предпочитаю gcc).
Как-то давно я написал разборщик командной строки. И с тех пор им пользуюсь. Вот код:
Заголовочный файл comline.h :
#ifndef COMLINE_THIS
#define COMLINE_THIS
#include <sstream>
using namespace std;
const char comline_switch1='-';
const char comline_switch2='/';
bool comline_getswstring(int argc,char *argv[],char sw,char** s);
bool comline_getnswstring(int argc, char *argv[],int num,char** s);
template <class T>
bool comline_getswvalue(int argc,char *argv[],char sw,T* val){
char *s;
bool ret=comline_getswstring(argc,argv,sw,&s);
if(ret!=false){
stringstream st(s);
if(val!=NULL) st>>(*val);
}
return ret;
};
#endif
Файл кода comline.cpp:
#include <comline.h>
bool comline_getswstring(int argc, char *argv[],char sw,char** s){
int i;
for(i=1;i!=argc;i++){
if(((argv[i][0]==comline_switch1)||(argv[i][0]==comline_switch2))&&(argv[i][1]==sw)){
if(s!=NULL) *s=argv[i]+2;
return true;
}//if
}//for
return false;
}
bool comline_getnswstring(int argc, char *argv[],int num,char** s){
int n=0;
int i;
for(i=1;i!=argc;i++){
if((argv[i][0]!=comline_switch1)&&(argv[i][0]!=comline_switch2)&&(argv[i][0]!=0)){
if(n==num){
if(s!=NULL) *s=argv[i];
return true;
}//if
n++;
}//if
}//for
return false;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте, за ранее извиняюсь за, возможно, нубский вопрос, но всё жеРазбираюсь с spring security, для своего приложения выполнил классическую...
Пишу небольшую игру, в ней генерируется случайное число, от этого числа зависит весь исход уровня, те надо его максимально рандомизировать,...