标签:否则 包括 res const bre split ons com 重置
1 #include<iostream> 2 #include<map> 3 #include<string> 4 #include<cstring> 5 using namespace std; 6 struct Sel{ 7 string sname; //选项名 8 int isS; //是否为该命令行工具接受的选项 9 int hasP; //此选项是否有参 10 int isI; //是否为此次命令出现过的选项 11 string pname; 12 }; 13 struct Sel sel[26]; 14 void setSel(){ //初始化选项 15 char c[2]; 16 c[0]=‘-‘; 17 string s="-a"; 18 for(int i=0;i<26;i++){ 19 char c=‘a‘+i; 20 s.replace(1,1,1,c); 21 sel[i].sname=s; 22 sel[i].isS=0; 23 sel[i].hasP=0; 24 sel[i].isI=0; 25 } 26 } 27 void reSelI(){ //重置是否为此次输入命令的标记位 28 for(int i=0;i<26;i++) sel[i].isI=0; 29 } 30 void printSel(){ //每次的命令结果输出 31 for(int i=0;i<26;i++){ 32 if(sel[i].isI){ 33 cout<<sel[i].sname; 34 cout<<" "; 35 if(sel[i].hasP){ 36 cout<<sel[i].pname; 37 cout<<" "; 38 } 39 } 40 } 41 cout<<endl; 42 } 43 void split(char *src, const char *separator, char **dest, int *num) //字符分割 44 { 45 char *pNext; 46 int count = 0; 47 48 if (src == NULL || strlen(src) == 0) return; 49 if (separator == NULL || strlen(separator) == 0) return; 50 51 pNext = strtok(src,separator); 52 53 while(pNext != NULL) 54 { 55 *dest++ = pNext; 56 ++count; 57 pNext = strtok(NULL,separator); 58 } 59 60 *num = count; 61 } 62 int isSel(char *src){ //判断是不是正确的选项 -a,-b,-c...-z 63 for(int i=0;i<26;i++){ 64 if(strcmp(src,sel[i].sname.c_str())==0){ 65 if(sel[i].isS){ 66 sel[i].isI=1; 67 return i; 68 } 69 } 70 } 71 return -1; 72 } 73 int main(){ 74 string ins; 75 cin>>ins; 76 setSel(); 77 for(int i=0;i<ins.length();i++){ //输入处理 78 sel[ins.at(i)-‘a‘].isS=1; 79 if(i+1<ins.length()&&ins.at(i+1)==‘:‘){ 80 sel[ins.at(i)-‘a‘].hasP=1; 81 ++i; 82 } 83 } 84 int n; 85 cin>>n; 86 char command[257]; 87 char *dest[256]; 88 getchar(); 89 for(int i=0;i<n;i++){ 90 cin.getline(command,257); 91 int num=0; 92 split(command," ",dest,&num); 93 for(int j=1;j<num;j++){ 94 int compare=isSel(dest[j]); 95 if(compare!=-1){ 96 if(sel[compare].hasP){ 97 if(j+1==num) break; //判断带参数得选项是不是最后一个字符串,即后面是否有参数 98 sel[compare].pname=dest[++j]; 99 } 100 } 101 else break; 102 } 103 cout<<"Case "<<(i+1)<<": "; 104 printSel(); 105 reSelI(); 106 } 107 return 0; 108 }
标签:否则 包括 res const bre split ons com 重置
原文地址:http://www.cnblogs.com/bitor/p/6568121.html