華為機試験問題——パラメータ解析

2381 ワード

転入先https://wenku.baidu.com/view/a61815cedd88d0d232d46a48.html
タイトル:
コマンドラインに次のコマンドを入力します.
xcopy /s c:\ d:\,
各パラメータは次のとおりです.
パラメータ1:コマンドワードxcopy
パラメータ2:文字列/s
パラメータ3:文字列c:
パラメータ4:文字列d:
パラメータ解析プログラムを作成して、コマンドラインの各パラメータを解析してください.
解析規則:
1.パラメータ区切り記号はスペース2.「」で囲まれたパラメータの場合、中央にスペースがある場合は、複数のパラメータに解析できません.たとえば、コマンドラインにxcopy/s「C:program files」「d:」と入力した場合、パラメータは4つのままで、3番目のパラメータはC:program filesではなく文字列C:program filesであるべきで、出力パラメータに注意する場合は、「」を削除し、引用符がネストされていないことに注意してください.3.パラメータ不定長4.入力は使用例により保証され、要求に合致しない入力は発生しない
例:
入力:xcopy/s c:\d:\
出力:
4
xcopy
/s
c:\\
d:\\
完全なコード:
#include #include #include #include using namespace std; int main(){string s 1;vectora,b;string::size_type position=0;const string::size_type npos=-1;getline(cin,s 1);if(s 1.find(char(34),0)!=npos)/引用符{while(1)//すべての引用符{position=s 1.find_first_of(char(34)//,position);             if (position==npos)                 break;             a.push_back(position);             position++;         }        for (int i=0;i        {             string tmp=s1.substr(a[i]+1,a[i+1]-a[i]-1);             position=0;        while(1)        {         position=tmp.find_first_of("",position);         if (position==npos)         break;         tmp[position]='_';         position++;         }         s1=s1.replace(a[i]+1,a[i+1]-a[i]-1,tmp);         }     }        if (s1.find(' ',0)!=npos)/スペース{position=0;while(1)//すべてのスペース{position=s 1.find_first_of(",position);if(position=npos)break;b.push_back(position);position++;        }         cout<         int i=0;//各セグメントパラメータfor(int k=0;k{while(i{if(s 1[i]==char(34))i+;else if(s 1[i]='')を出力{                  cout<                  i++;                }                else if(s1[i]==' ')                 i++;                else                {                 cout<                 i++;                }             }             cout<         }         for (int i=b[b.size()-1];i         {             if(s1[i]==char(34))             i++;             else if(s1[i]=='_')             {                 cout<                  i++;             }             else if(s1[i]==' ')                 i++;             else             {                 cout<                 i++; }}cout<}else//パラメータが1つしかない(スペースなし){cout