問題描述:輸入C語言變量定義語句,符合C語言語法要求,變量間可以有多個空格,包含數組,指針定義。
輸入: int x12, y=1, num_stu=89, a[30], *p;
輸出:a,num_stu,p,x12,y
思路:關鍵是確定當前所處的狀態
state1: 處於變量名中
state2: 處於‘=’或‘[’ 到‘,’之間
state3: 處於‘,’到下一變量之間
處理每個字符前先確定當前的狀態,再按狀態來進行相應的處理。每次遇到空格或‘*' 可以直接跳過不影響結果。
#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;
int main(){
string definition= "int x12, y=1, num_stu=89, a[30], *p;";
int flag=0;
//預處理,去掉開頭的變量類型和空格
for(int i =0;i<definition.size();++i){
if(definition[i]!=' '&&flag){definition=definition.substr(i);break;}
if(definition[i]==' ')flag=1;//表示已經遇到過空格
}
flag=0;
unordered_set<string> vSet;
string temp="";
for(int i=0;i<definition.size();++i){
if(definition[i]==' '||definition[i]=='*')continue;
//確定狀態
if(definition[i]=='='||definition[i]=='['||(flag==1&&definition[i]!=','))flag=1;
else if(definition[i]==','||definition[i]==';')flag=2;
else flag=0;
//按狀態來選擇處理方式
switch(flag){
case 0 :temp+=definition[i];break;
case 1 :break;
case 2 :vSet.insert(temp);temp="";
}
}
for(auto e:vSet)cout<<e<<',';
return 0;
}