華為機試験問題——パラメータ解析
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
タイトル:
コマンドラインに次のコマンドを入力します.
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