0.1.3版本更新:
1.架构调整:1.将System_com 类拆分,不再从属于System_com 类
2.将System_com 类的功能拆分为 System_com (基本功能,无附加存储)和Systemext_com(基本拓展,有附加存储)
3.所有的Systemext 需要初始化的功能都放在自己的class 的void init() 在System.wel.sysint()系统开启之前调用
2.bug 修复:解决comsolve_com 类输入空行会报错误id99的问题
3.功能改善:
1.现在系统init()完毕之后会提示"System has inited"(很短)
2.按下回车(输入空命令)不会提示任何信息
3.改善了系统启动进程
4.去掉了comsolve_com::code_empty 因为已经在solve0中支持
5.优化了注释和代码美观
1 #include<iostream> 2 #include<string> 3 #include<cstdlib> 4 #include<vector> 5 #include<windows.h> 6 #include<map> 7 #include<cstdio> 8 using std::cin; 9 using std::cout; 10 using std::string; 11 using std::vector; 12 using std::endl; 13 using std::map; 14 bool is_empty_char(char c){ 15 return c==' '|| c==' '; 16 } 17 class out_com{//字符串输出 18 public: 19 void print(string s);//输出 20 void print(string s,int from);//从第from开始输出,一直到最后 21 void println(string s);//输出并换行 22 void println(string s,int from);//从from开始输出,并换行 23 }; 24 class err_com{//错误处理 25 public: 26 void throwln(string s);//输出错误信息 27 void throwshut(string s,int timeout);//输出错误信息并且在timeout毫秒后关闭程序 28 }; 29 class fileio_com{ //文件输入输出(还没写) 30 }; 31 class in_com{//字符串输入 32 public: 33 void read(string &s);//输入(空白作结尾符号) 34 void readln(string &s); //输入(换行作结尾符号) 35 }; 36 class systemio_com{ //依赖于Windows io的功能 37 public: 38 void windowscmd(string s){//直接在cmd里面执行指令 39 system(s.c_str()); 40 } 41 void progexit(int code){//退出程序并且错误码为code 42 exit(code); 43 } 44 void cleanscr();//清屏 45 void sleep(int k){//暂停k毫秒 46 Sleep(k); 47 } 48 }; 49 class welcome_com{//系统欢迎与用户界面(并不是系统核心) 50 public: 51 void sysinfo();//系统信息 52 void startsys();//启动和初始化 53 void startscr();//开启屏幕 54 void closescr();//关闭屏幕 55 void closesys();//关闭系统 56 void initsys();//数据结构初始化 57 void closetimeout(int m_secs);//延迟关闭(毫秒) 58 void sysmain();//系统运行的重要内容 59 void help();//输出帮助信息 60 void advertisements();//输出广告 61 }; 62 class storage_com{//存储管理 63 public: 64 static const int code_void=0,//代号:没有类型 65 code_integer=1,//整数 66 code_floating=2,//浮点数 67 code_string=3;//字符串 68 struct varinfo{//保存变量信息的数据结构 69 string name; 70 int type; 71 int address; 72 varinfo(int a=0,int b=0):type(a),address(b){} 73 varinfo(string a,int b,int c):name(a),type(b),address(c){} 74 }; 75 typedef long long Integer;//Integer:long long 76 typedef double Floating;//Floating: double 77 typedef string String;//String: string 78 vector<Integer> Ints;//保存Integer 的数组 79 vector<Floating> Floats;//保存Floating的数组 80 vector<String> Strings;//保存String的数组 81 map<string,varinfo> varmap;//string->varinfo的映射 82 public://work for int only 83 storage(){ 84 } 85 void init(); 86 int gettype(string name);//获得变量名name的类型 87 void putvalue(string name,int k);//将变量名name的值改为k 88 int getInteger(string name);//获得name的int值 89 void solve0(string command); 90 }; 91 class comsolve_com{//指令处理 92 private://static const int code_ 93 static const int code_unknown=0;//错误指令 94 static const int code_print=1; 95 static const int code_windowscmd=2; 96 static const int code_exit=3; 97 static const int code_sysinfo=4; 98 static const int code_help=5; 99 static const int code_var=6, 100 static const int Max_basic_command=100;//最大命令数目(现在只有8个) 101 string basic_command[Max_basic_command];//指令代号->指令名的映射 102 map<string,int> commap;//指令名->指令代号的映射 103 public: 104 comsolve_com(){ 105 ; 106 } 107 void init();//初始化 108 void solve0(string s);//第一步处理 109 void solve1(string s,int left,int code);//第二步命令处理 110 }; 111 class System_com{//基本功能(几乎无需初始化) 112 public: 113 out_com out; 114 err_com err; 115 in_com in; 116 systemio_com sysio; 117 fileio_com fileio; 118 welcome_com wel; 119 }System; 120 class Systeme_com{//基本拓展功能(可能需要初始化) 121 public: 122 storage_com var; 123 comsolve_com comsolve; 124 }Systemext; 125 void out_com::print(string s){ 126 print(s,0); 127 } 128 void out_com::println(string s){ 129 print(s);cout<<endl; 130 } 131 void out_com::print(string s,int from){ 132 int len=s.length(); 133 string s1=s.substr(from,len-from); 134 cout<<s1; 135 } 136 void out_com::println(string s,int from){ 137 print(s,from);cout<<endl; 138 } 139 void in_com::read(string &s){ 140 cin>>s; 141 } 142 void in_com::readln(string &s){ 143 getline(cin,s); 144 } 145 void err_com::throwln(string s){ 146 System.sysio.windowscmd("color 1f"); //color 1 3 9是蓝色 147 System.wel.sysinfo(); 148 System.out.println("System Error:There is a problem:"); 149 System.out.println(s); 150 } 151 void err_com::throwshut(string s,int timeout){ 152 System.err.throwln(s); 153 System.wel.closetimeout(timeout); 154 } 155 void welcome_com::sysinfo(){ 156 System.out.println("[Command Operatoring System]"); 157 System.out.println("[This system is designed by cdsidi.]"); 158 System.out.println("[Version:0.1.3]"); 159 /************更新日志*************************** 160 0.0.1: 基本的框架和命令基础 161 0.0.2: 优化了GUI,添加了启动和关闭画面,为fileio做下早期准备 162 0.1.0: 在底层支持了Integer类型 163 0.1.1: 优化了用户交互、完善了代码注释 164 0.1.2: 添加了广告 165 0.1.3:重构代码,将System里面的类 拆分开来,为多文件编程打下基础 166 ***********************************************/ 167 } 168 void welcome_com::advertisements(){ 169 System.out.println("****************以下是广告*************"); 170 System.out.println("如果喜欢这个系统,请捐助我 "); 171 System.out.println("如果想投放广告,请联系我 "); 172 System.out.println("https://www.cnblogs.com/cdsidi"); 173 System.out.println("51C SB 派对!"); 174 System.out.println("****************广告已结束*************"); 175 } 176 void comsolve_com::solve1(string s,int left,int code){ 177 int len=s.length(),tmplen=len-left; 178 string tmp=s.substr(left,len-left);//从left一直截取到len(下一步处理的tmp) 179 switch(code){ 180 case code_unknown: 181 System.out.println("Bad command. Please type 'help' for help of commands.");break; 182 case code_print: 183 System.out.println(tmp);break; 184 case code_windowscmd: 185 System.sysio.windowscmd(tmp);break; 186 case code_exit: 187 System.wel.closesys();break; 188 case code_sysinfo: 189 System.wel.sysinfo();break; 190 case code_help: 191 System.wel.help();break; 192 case code_var: 193 Systemext.var.solve0(tmp);break; 194 default://这里有问题! 195 printf("Bad command. "); 196 //printf("Bad command. id:%d ",code);break; 197 } 198 } 199 void comsolve_com::solve0(string s){ 200 int len=s.length(); 201 for(int i=0;i<len;++i){//枚举结尾 202 if(is_empty_char(s[i])){//空白[i] 203 string tmp=s.substr(0,i);//不算空白([0,i-1]是否达到 ) 204 if(commap[tmp]!=0){ 205 solve1(s,i+1,commap[tmp]);//转交下层处理,[i+1,end]跳过空白 206 return;//该命令运行完毕 207 } 208 } 209 } 210 //中间没有遇到任何命令, 211 solve1(s,len,commap[s]); 212 //left=len:传递一个空串 213 //若是正常命令,则执行,否则BADCOMMAND 214 } 215 void comsolve_com::init(){ 216 basic_command[code_print]=string("print"); 217 basic_command[code_windowscmd]=string("windows"); 218 basic_command[code_exit]=string("exit"); 219 basic_command[code_sysinfo]=string("sysinfo"); 220 basic_command[code_help]="help"; 221 basic_command[code_var]="var"; 222 basic_command[code_empty]=""; 223 for(int i=0;i<Max_basic_command;++i){ 224 commap[basic_command[i]]=i; 225 } 226 } 227 void systemio_com::cleanscr(){ 228 system("cls"); 229 } 230 void welcome_com::startscr(){//启动屏幕 231 int cnt_stars=80,cnt_emptyl=10,waitms=3000; 232 System.sysio.cleanscr(); 233 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 234 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 235 System.wel.sysinfo(); 236 System.wel.advertisements(); 237 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 238 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 239 System.out.print(" "); 240 System.out.println("Starting..."); 241 System.sysio.sleep(waitms); 242 } 243 void welcome_com::closescr(){ 244 System.sysio.cleanscr(); 245 int cnt_stars=80,cnt_emptyl=10,waitms=3000; 246 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 247 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 248 System.wel.sysinfo(); 249 System.wel.advertisements(); 250 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 251 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 252 System.out.print(" "); 253 System.out.println("System is shutting down."); 254 System.sysio.sleep(waitms); 255 //System.sysio.cleanscr(); 256 } 257 void welcome_com::help(){ 258 System.out.println("************Start of help*****************"); 259 System.out.println("1. command 'print': "); 260 System.out.println("print {string} System will say {string}."); 261 System.out.println("eg. print Hello!"); 262 System.out.println("2. command 'exit': "); 263 System.out.println("System will close."); 264 System.out.println("eg. exit"); 265 System.out.println("3. command 'sysinfo': "); 266 System.out.println("System will show the information of the System."); 267 System.out.println("eg. sysinfo"); 268 System.out.println("4. command 'help': "); 269 System.out.println("System will show the commands of the System."); 270 System.out.println("eg. help"); 271 System.out.println("5. command 'windows': "); 272 System.out.println("windows {string} system will do it in Windows cmd.exe"); 273 System.out.println("eg. windows echo hello"); 274 System.out.println("************End of help*****************"); 275 } 276 void welcome_com::startsys(){ 277 System.sysio.windowscmd("color 0f"); 278 System.wel.startscr(); 279 System.wel.initsys(); 280 System.sysio.cleanscr(); 281 System.out.println("System has got ready."); 282 System.wel.sysmain(); 283 } 284 void welcome_com::initsys(){ 285 286 Systemext.comsolve.init(); 287 Systemext.var.init(); 288 System.out.println("System has inited"); 289 } 290 void welcome_com::closesys(){ 291 System.wel.closescr(); 292 System.out.println("Press any key to exit."); 293 System.sysio.windowscmd("pause >nul"); 294 System.sysio.progexit(0); 295 } 296 void welcome_com::closetimeout(int m_secs){ 297 printf("System will shutdown in %d seconds. Please get ready.",m_secs/1000); 298 Sleep(m_secs); 299 System.wel.closesys(); 300 } 301 void welcome_com::sysmain(){ 302 string s; 303 while(1){ 304 System.out.print(">"); 305 System.in.readln(s); 306 if(!s.empty()) 307 Systemext.comsolve.solve0(s); 308 } 309 } 310 int storage_com::getInteger(string name){ 311 varinfo var=varmap[name]; 312 if(var.type==code_integer){ 313 return Ints[var.address]; 314 }else{ 315 // System.err.throwshut("Error Type."); 316 return 0; 317 } 318 } 319 void storage_com::putvalue(string name,int val){ 320 varinfo var=varmap[name]; 321 if(var.type==code_void){ 322 Ints.push_back(val); 323 var=varinfo(name,code_integer,Ints.size()-1); 324 varmap[name]=var; 325 }else if(var.type==code_integer){//此变量存在 326 Ints[var.address]=val; 327 }else{//注意,以下会出现内存泄露 328 Ints.push_back(val); 329 var=varinfo(name,code_integer,Ints.size()-1); 330 varmap[name]=var;//将之前的存储信息覆盖 331 } 332 } 333 int storage_com::gettype(string name){ 334 varinfo ret=varmap[name]; 335 return ret.type; 336 }/*下面这里我没看明白 ,先暂时不用了 */ 337 void storage_com::solve0(string s){//s是storage命令处理 338 int len=s.length(); 339 for(int i=0;i<len;++i){//枚举i,一直到结尾 340 if(!is_empty_char(s[i])){//空白[i] 341 string tmp=s.substr(0,i);//不算空白[0,i-1]是否找到变量名 342 varinfo tmpinfo=varmap[tmp]; 343 if(tmpinfo.type!=0){//如果这个变量存在 344 //solve1(s,i+1,tmpinfo);//转交下层处理,[i+1,end]跳过空白 345 return;//该命令运行完毕 346 } 347 } 348 } 349 System.out.println("Bad type."); 350 } 351 void storage_com::init(){ 352 vector<Integer>().swap(Ints); 353 vector<Floating>().swap(Floats); 354 vector<String>().swap(Strings); 355 varmap.clear(); 356 } 357 int main(){ 358 System.wel.startsys(); 359 return 0; 360 }
0.1.4版本更新:
1.添加了"cls"指令 用于清屏
2. storage 已经支持Integer/Floating/String全类型
3. 现在命令首尾如果有空格会自动忽略(trim函数)
4.支持通过varinfo 或者string name来输出变量的值的字符串
5. 由于help指令未更新,所以发布0.1.4 patch1 来修复bug
1 #include<iostream> 2 #include<string> 3 #include<cstdlib> 4 #include<vector> 5 #include<windows.h> 6 #include<map> 7 #include<ctime> 8 #include<cstdio> 9 #include<sstream> 10 using std::cin; 11 using std::cout; 12 using std::string; 13 using std::vector; 14 using std::endl; 15 using std::map; 16 bool is_empty_char(char c){ 17 return c==' '|| c==' '; 18 } 19 void trim(string &s){//删除字符串首尾空格 20 if(s.empty()) return; 21 s.erase(0,s.find_first_not_of(" ")); 22 s.erase(s.find_last_not_of(" ") + 1); 23 } 24 class out_com{//字符串输出 25 public: 26 void print(string s);//输出 27 void print(string s,int from);//从第from开始输出,一直到最后 28 void println(string s);//输出并换行 29 void println(string s,int from);//从from开始输出,并换行 30 }; 31 class err_com{//错误处理 32 public: 33 void throwln(string s);//输出错误信息 34 void throwshut(string s,int timeout);//输出错误信息并且在timeout毫秒后关闭程序 35 }; 36 class fileio_com{//文件输入输出(还没写) 37 }; 38 class in_com{//字符串输入 39 public: 40 void read(string &s);//输入(空白作结尾符号) 41 void readln(string &s); //输入(换行作结尾符号) 42 }; 43 class systemio_com{ //依赖于Windows io的功能 44 public: 45 void windowscmd(string s){//直接在cmd里面执行指令 46 system(s.c_str()); 47 } 48 void progexit(int code){//退出程序并且错误码为code 49 exit(code); 50 } 51 void cleanscr();//清屏 52 void sleep(int k){//暂停k毫秒 53 Sleep(k); 54 } 55 }; 56 class welcome_com{//系统欢迎与用户界面(并不是系统核心) 57 public: 58 void sysinfo();//系统信息 59 void startsys();//启动和初始化 60 void startscr();//开启屏幕 61 void closescr();//关闭屏幕 62 void closesys();//关闭系统 63 void initsys();//数据结构初始化 64 void closetimeout(int m_secs);//延迟关闭(毫秒) 65 void sysmain();//系统运行的重要内容 66 void help();//输出帮助信息 67 void advertisements();//输出广告 68 }; 69 class storage_com{//存储管理 70 public: 71 static const int code_void=0,//空类型 72 code_integer=1,//整数 73 code_floating=2,//浮点数 74 code_string=3;//字符串 75 76 struct varinfo{//保存变量信息的数据结构 77 string name; 78 int type; 79 int address; 80 varinfo(int a=0,int b=0):type(a),address(b){} 81 varinfo(string a,int b,int c):name(a),type(b),address(c){} 82 }; 83 typedef long long Integer;//Integer:long long 84 typedef double Floating;//Floating: double 85 typedef string String;//String: string 86 vector<Integer> Ints;//保存Integer 的数组 87 vector<Floating> Floats;//保存Floating的数组 88 vector<String> Strings;//保存String的数组 89 map<string,varinfo> varmap;//string->varinfo的映射 90 public: 91 storage(){} 92 void init(); 93 int gettype(string name);//获得变量名name的类型 94 void putvalue(string name,long long val);//将变量名name的值设为val 95 void putvalue(string name,string val); 96 void putvalue(string name,double val); 97 int getInteger(string name);//获得name的int值 98 String getString(string name); 99 double getFloating(string name); 100 void solve0(string command); 101 string getvarstr(varinfo var); 102 string getvarstr(string name); 103 void printvarstr(string name); 104 void printvarstrln(string name); 105 }; 106 class comsolve_com{//指令处理 107 private: 108 static const int 109 code_unknown=0,//错误指令 110 code_print=1, 111 code_windowscmd=2, 112 code_exit=3, 113 code_sysinfo=4, 114 code_help=5, 115 code_var=6, 116 code_cls=7; 117 static const int 118 code_varflag0='%';//变量出现的标志 119 static const int Max_basic_command=100;//最大命令数目(现在只有8个) 120 string basic_command[Max_basic_command];//指令代号->指令名的映射 121 map<string,int> commap;//指令名->指令代号的映射 122 public: 123 comsolve_com(){} 124 void init();//初始化 125 void solve0(string s);//第一步处理 126 void solve1(string s,int left,int code);//第二步命令处理 127 string varsolve(string s);//把字符串中的变量替换成所代表的的值 128 }; 129 class System_com{//基本功能(几乎无需初始化) 130 public: 131 out_com out; 132 err_com err; 133 in_com in; 134 systemio_com sysio; 135 fileio_com fileio; 136 welcome_com wel; 137 System_com(){} 138 }System; 139 class Systemext_com{//基本拓展功能(可能需要初始化) 140 public: 141 storage_com var; 142 comsolve_com comsolve; 143 Systemext_com(){} 144 init(){ 145 var.init(); 146 comsolve.init(); 147 } 148 }Systemext; 149 void out_com::print(string s){ 150 print(s,0); 151 } 152 void out_com::println(string s){ 153 print(s);cout<<endl; 154 } 155 void out_com::print(string s,int from){ 156 int len=s.length(); 157 string s1=s.substr(from,len-from); 158 cout<<s1; 159 } 160 void out_com::println(string s,int from){ 161 print(s,from);cout<<endl; 162 } 163 void in_com::read(string &s){ 164 cin>>s; 165 } 166 void in_com::readln(string &s){ 167 getline(cin,s); 168 } 169 void err_com::throwln(string s){ 170 System.sysio.windowscmd("color 1f"); //color 1 3 9是蓝色 171 System.wel.sysinfo(); 172 System.out.println("System Error:There is a problem:"); 173 System.out.println(s); 174 } 175 void err_com::throwshut(string s,int timeout){ 176 System.err.throwln(s); 177 System.wel.closetimeout(timeout); 178 } 179 void welcome_com::sysinfo(){ 180 System.out.println("[Command Operatoring System]"); 181 System.out.println("[This system is designed by cdsidi.]"); 182 System.out.println("[Version:0.1.4 patch 1]"); 183 /************更新日志*************************** 184 0.0.1: 基本的框架和命令基础 185 0.0.2: 优化了GUI,添加了启动和关闭画面,为fileio做下早期准备 186 0.1.0: 在底层支持了Integer类型 187 0.1.1: 优化了用户交互、完善了代码注释 188 0.1.2: 添加了广告 189 0.1.3:重构代码,将System里面的类 拆分开来,为多文件编程打下基础 190 0.1.4: 1.添加了"cls"指令 用于清屏 191 2. storage 已经支持Integer/Floating/String全类型 192 3. 现在命令首尾如果有空格会自动忽略(trim函数) 193 4.支持通过varinfo string 来输出变量的内容 194 0.1.4 patch 1: 1.修复了bug;添加了 cls 指令在help内 195 ***********************************************/ 196 } 197 void welcome_com::advertisements(){ 198 System.out.println("****************以下是广告*************"); 199 System.out.println("_______广告 1_________ "); 200 System.out.println("如果喜欢ComSys,请捐助我 "); 201 System.out.println("如果想投放广告,请联系我 "); 202 System.out.println("https://www.cnblogs.com/cdsidi"); 203 System.out.println("_______广告 2_________ "); 204 System.out.println("现在加入 51C SB 派对!"); 205 System.out.println("****************广告已结束*************"); 206 } 207 //这里有bug 先不用了 208 /* 209 string comsolve_com::varsolve(string s){ 210 string ret; 211 int len=s.length(), 212 lastplace=-1;//上一个没有配对的varflag位置 213 for(int i=0;i<len;++i){ 214 // printf("lastplace:%d i:%d len:%d ",lastplace,i,len); 215 if(s.at(i)==code_varflag0){ 216 if(lastplace!=-1) { 217 lastplace=i; 218 }else{ 219 string varname=s.substr(lastplace+1,i-(lastplace+1));//恰好删除varflag中间的部分 220 if(!varname.empty()){ 221 string varstr=Systemext.var.getvarstr(varname); 222 ret.erase(lastplace,i-lastplace);//删除ret从lastplace开始,一直到i-1的部分 223 continue; 224 } 225 lastplace=-1; 226 } 227 } 228 ret.push_back(s.at(i)); 229 } 230 return ret; 231 }*/ 232 void comsolve_com::solve1(string s,int left,int code){ 233 int len=s.length(),tmplen=len-left; 234 string tmp=s.substr(left,len-left);//从left一直截取到len(下一步处理的tmp) 235 switch(code){ 236 case code_unknown: 237 System.out.println("Bad command. Please type 'help' for help of commands.");break; 238 case code_print: 239 System.out.println(tmp);break; 240 case code_windowscmd: 241 System.sysio.windowscmd(tmp);break; 242 case code_exit: 243 System.wel.closesys();break; 244 case code_sysinfo: 245 System.wel.sysinfo();break; 246 case code_help: 247 System.wel.help();break; 248 case code_var: 249 Systemext.var.solve0(tmp);break; 250 case code_cls: 251 System.sysio.cleanscr();break; 252 default: 253 printf("Bad command. "); 254 } 255 } 256 void comsolve_com::solve0(string s){ 257 int len=s.length(); 258 for(int i=0;i<len;++i){//枚举第一级命令的结尾 259 if(is_empty_char(s[i])){//如果[i]是空格 260 string tmp=s.substr(0,i);//不算空格[0,i-1]是否找到一个指令 261 if(commap[tmp]!=0){ 262 solve1(s,i+1,commap[tmp]);//转交下层处理,[i+1,end]跳过空格 263 return; 264 } 265 } 266 } 267 //s没有遇到任何空格,传递整个字符串作为第一级命令,第二级命令是空串 268 solve1(s,len,commap[s]); 269 } 270 void comsolve_com::init(){ 271 basic_command[code_print]="print"; 272 basic_command[code_windowscmd]="windows"; 273 basic_command[code_exit]="exit"; 274 basic_command[code_sysinfo]="sysinfo"; 275 basic_command[code_help]="help"; 276 basic_command[code_var]="var"; 277 basic_command[code_cls]="cls"; 278 for(int i=0;i<Max_basic_command;++i){ 279 commap[basic_command[i]]=i; 280 } 281 } 282 void systemio_com::cleanscr(){ 283 system("cls"); 284 } 285 void welcome_com::startscr(){//启动屏幕 286 int cnt_stars=80,cnt_emptyl=10,waitms=3000; 287 System.sysio.cleanscr(); 288 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 289 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 290 System.wel.sysinfo(); 291 System.wel.advertisements(); 292 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 293 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 294 System.out.print(" "); 295 System.out.println("Starting..."); 296 System.sysio.sleep(waitms); 297 } 298 void welcome_com::closescr(){ 299 System.sysio.cleanscr(); 300 int cnt_stars=80,cnt_emptyl=10,waitms=3000; 301 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 302 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 303 System.wel.sysinfo(); 304 System.wel.advertisements(); 305 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 306 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 307 System.out.print(" "); 308 System.out.println("System is shutting down."); 309 System.sysio.sleep(waitms); 310 //System.sysio.cleanscr(); 311 } 312 void welcome_com::help(){ 313 System.out.println("************Start of help*****************"); 314 System.out.println("1. command 'print': "); 315 System.out.println("print {string} System will say {string}."); 316 System.out.println("eg. print Hello!"); 317 System.out.println("2. command 'exit': "); 318 System.out.println("System will close."); 319 System.out.println("eg. exit"); 320 System.out.println("3. command 'sysinfo': "); 321 System.out.println("System will show the information of the System."); 322 System.out.println("eg. sysinfo"); 323 System.out.println("4. command 'help': "); 324 System.out.println("System will show the commands of the System."); 325 System.out.println("eg. help"); 326 System.out.println("5. command 'windows': "); 327 System.out.println("windows {string} system will do it in Windows cmd.exe"); 328 System.out.println("eg. windows echo hello"); 329 System.out.println("6. command 'cls': "); 330 System.out.println("System will clean the screen."); 331 System.out.println("eg. cls"); 332 System.out.println("************End of help*****************"); 333 } 334 void welcome_com::startsys(){ 335 System.sysio.windowscmd("color 0f"); 336 System.wel.startscr(); 337 System.wel.initsys(); 338 System.sysio.cleanscr(); 339 System.out.println("System has got ready."); 340 System.wel.sysmain(); 341 } 342 void welcome_com::initsys(){ 343 344 Systemext.comsolve.init(); 345 Systemext.var.init(); 346 System.out.println("System has inited"); 347 } 348 void welcome_com::closesys(){ 349 System.wel.closescr(); 350 System.out.println("Press any key to exit."); 351 System.sysio.windowscmd("pause >nul"); 352 System.sysio.progexit(0); 353 } 354 void welcome_com::closetimeout(int m_secs){ 355 printf("System will shutdown in %d seconds. Please get ready.",m_secs/1000); 356 Sleep(m_secs); 357 System.wel.closesys(); 358 } 359 void welcome_com::sysmain(){ 360 string s; 361 while(1){ 362 System.out.print(">"); 363 System.in.readln(s); 364 trim(s);//去掉首尾空格 365 if(!s.empty()) 366 Systemext.comsolve.solve0(s); 367 } 368 } 369 int storage_com::getInteger(string name){ 370 varinfo var=varmap[name]; 371 if(var.type==code_integer){ 372 return Ints[var.address]; 373 }else{ 374 System.err.throwln("Wrong Type."); 375 return 0; 376 } 377 } 378 double storage_com::getFloating(string name){ 379 varinfo var=varmap[name]; 380 if(var.type==code_floating){ 381 return Floats[var.address]; 382 }else{ 383 System.err.throwln("Wrong Type."); 384 return 0; 385 } 386 } 387 string storage_com::getString(string name){ 388 varinfo var=varmap[name]; 389 if(var.type==code_string){ 390 return Strings[var.address]; 391 }else{ 392 System.err.throwln("Wrong Type."); 393 return ""; 394 } 395 } 396 void storage_com::putvalue(string name,long long val){ 397 varinfo var=varmap[name]; 398 if(var.type==code_void){ 399 Ints.push_back(val); 400 var=varinfo(name,code_integer,Ints.size()-1); 401 varmap[name]=var; 402 }else if(var.type==code_integer){//此变量存在 403 Ints[var.address]=val; 404 }else{//注意,以下会出现在内存池中变量的内存泄露 405 Ints.push_back(val); 406 var=varinfo(name,code_integer,Ints.size()-1); 407 varmap[name]=var; 408 //将之前的存储信息覆盖(之前的内存将永远无法用到) 409 } 410 } 411 void storage_com::putvalue(string name,string val){ 412 varinfo var=varmap[name]; 413 if(var.type==code_void){ 414 Strings.push_back(val); 415 var=varinfo(name,code_string,Strings.size()-1); 416 varmap[name]=var; 417 }else if(var.type==code_string){ 418 Strings[var.address]=val; 419 }else{ 420 Strings.push_back(val); 421 var=varinfo(name,code_string,Strings.size()-1); 422 varmap[name]=var; 423 } 424 } 425 void storage_com::putvalue(string name,double val){ 426 varinfo var=varmap[name]; 427 const int type=var.type; 428 if(type==code_void){ 429 Floats.push_back(val); 430 var=varinfo(name,code_floating,Floats.size()-1); 431 varmap[name]=var; 432 }else if(type==code_floating){ 433 Floats[var.address]=val; 434 }else{ 435 Floats.push_back(val); 436 var=varinfo(name,code_floating,Floats.size()-1); 437 varmap[name]=var; 438 } 439 } 440 int storage_com::gettype(string name){ 441 varinfo ret=varmap[name]; 442 return ret.type; 443 } 444 string storage_com::getvarstr(varinfo var){ 445 const int type=var.type,address=var.address; 446 string ret; 447 std::stringstream stream; 448 if(type==code_integer){ 449 stream<<Ints.at(address); 450 }else if (type==code_string){ 451 stream<<Strings.at(address); 452 }else if (type==code_floating){ 453 stream<<Floats.at(address); 454 }else{ 455 return "VOID"; 456 } 457 stream>>ret; 458 return ret; 459 } 460 string storage_com::getvarstr(string name){ 461 varinfo var=varmap[name]; 462 return getvarstr(var); 463 } 464 void storage_com::printvarstr(string name){ 465 System.out.print(getvarstr(name)); 466 } 467 void storage_com::printvarstrln(string name){ 468 System.out.println(getvarstr(name)); 469 } 470 /*下面这里我没看明白 ,先暂时不用了 */ 471 void storage_com::solve0(string s){//s是storage命令处理 472 int len=s.length(); 473 for(int i=0;i<len;++i){//枚举i,一直到结尾 474 if(!is_empty_char(s[i])){//空白[i] 475 string tmp=s.substr(0,i);//不算空白[0,i-1]是否找到变量名 476 varinfo tmpinfo=varmap[tmp]; 477 if(tmpinfo.type!=0){//如果这个变量存在 478 //solve1(s,i+1,tmpinfo);//转交下层处理,[i+1,end]跳过空白 479 return;//该命令运行完毕 480 } 481 } 482 } 483 System.out.println("Bad type."); 484 } 485 void storage_com::init(){ 486 vector<Integer>().swap(Ints); 487 vector<Floating>().swap(Floats); 488 vector<String>().swap(Strings); 489 map<string,varinfo>().swap(varmap); 490 } 491 int main(){ 492 System.wel.startsys(); 493 return 0; 494 }
0.1.5版本更新:
1.添加了syscore_com 类 拆分了welcome_com的一些功能
2.整合了开始屏幕和关闭屏幕欢迎信息
3.添加了"welcome::about()"包含系统信息和广告
4.更改了版本号系统[x.x.x.x] 最后一位是补丁号
1 #include<iostream> 2 #include<string> 3 #include<cstdlib> 4 #include<vector> 5 #include<windows.h> 6 #include<map> 7 #include<ctime> 8 #include<cstdio> 9 #include<sstream> 10 using std::cin; 11 using std::cout; 12 using std::string; 13 using std::vector; 14 using std::endl; 15 using std::map; 16 bool is_empty_char(char c){ 17 return c==' '|| c==' '; 18 } 19 void trim(string &s){//删除字符串首尾空格 20 if(s.empty()) return; 21 s.erase(0,s.find_first_not_of(" ")); 22 s.erase(s.find_last_not_of(" ") + 1); 23 } 24 class out_com{//字符串输出 25 public: 26 void print(string s);//输出 27 void print(string s,int from);//从第from开始输出,一直到最后 28 void println(string s);//输出并换行 29 void println(string s,int from);//从from开始输出,并换行 30 }; 31 class err_com{//错误处理 32 public: 33 void throwln(string s);//输出错误信息 34 void throwshut(string s,int timeout);//输出错误信息并且在timeout毫秒后关闭程序 35 }; 36 class fileio_com{//文件输入输出(还没写) 37 }; 38 class in_com{//字符串输入 39 public: 40 void read(string &s);//输入(空白作结尾符号) 41 void readln(string &s); //输入(换行作结尾符号) 42 }; 43 class systemio_com{ //依赖于Windows io的功能 44 public: 45 void windowscmd(string s){//直接在cmd里面执行指令 46 system(s.c_str()); 47 } 48 void progexit(int code){//退出程序并且错误码为code 49 exit(code); 50 } 51 void cleanscr();//清屏 52 void sleep(int k){//暂停k毫秒 53 Sleep(k); 54 } 55 }; 56 class welcome_com{//系统欢迎与用户界面(并不是系统核心) 57 public: 58 void sysinfo();//系统信息 59 void startsys();//启动和初始化 60 void welcomescr(string message);//开始和关闭屏幕 61 void help();//输出帮助信息 62 void advertisements();//输出广告 63 void about();//输出关于信息 64 }; 65 class storage_com{//存储管理 66 public: 67 static const int code_void=0,//空类型 68 code_integer=1,//整数 69 code_floating=2,//浮点数 70 code_string=3;//字符串 71 72 struct varinfo{//保存变量信息的数据结构 73 string name; 74 int type; 75 int address; 76 varinfo(int a=0,int b=0):type(a),address(b){} 77 varinfo(string a,int b,int c):name(a),type(b),address(c){} 78 }; 79 typedef long long Integer;//Integer:long long 80 typedef double Floating;//Floating: double 81 typedef string String;//String: string 82 vector<Integer> Ints;//保存Integer 的数组 83 vector<Floating> Floats;//保存Floating的数组 84 vector<String> Strings;//保存String的数组 85 map<string,varinfo> varmap;//string->varinfo的映射 86 public: 87 storage(){} 88 void init(); 89 int gettype(string name);//获得变量名name的类型 90 void putvalue(string name,long long val);//将变量名name的值设为val 91 void putvalue(string name,string val); 92 void putvalue(string name,double val); 93 int getInteger(string name);//获得name的int值 94 String getString(string name); 95 double getFloating(string name); 96 void solve0(string command); 97 string getvarstr(varinfo var); 98 string getvarstr(string name); 99 void printvarstr(string name); 100 void printvarstrln(string name); 101 }; 102 class syscore_com{//系统核心 103 public: 104 void closesys();//关闭系统 105 void initsys();//数据结构初始化 106 void closetimeout(int m_secs);//延迟关闭(毫秒) 107 void sysmain();//系统运行的重要内容 108 }; 109 class comsolve_com{//指令处理 110 private: 111 static const int 112 code_unknown=0,//错误指令 113 code_print=1, 114 code_windowscmd=2, 115 code_exit=3, 116 code_sysinfo=4, 117 code_help=5, 118 code_var=6, 119 code_cls=7; 120 static const int 121 code_varflag0='%';//变量出现的标志 122 static const int Max_basic_command=100;//最大命令数目(现在只有8个) 123 string basic_command[Max_basic_command];//指令代号->指令名的映射 124 map<string,int> commap;//指令名->指令代号的映射 125 public: 126 comsolve_com(){} 127 void init();//初始化 128 void solve0(string s);//第一步处理 129 void solve1(string s,int left,int code);//第二步命令处理 130 string varsolve(string s);//把字符串中的变量替换成所代表的的值 131 }; 132 class System_com{//基本功能(几乎无需初始化) 133 public: 134 out_com out; 135 err_com err; 136 in_com in; 137 systemio_com sysio; 138 fileio_com fileio; 139 welcome_com wel; 140 syscore_com syscore; 141 System_com(){} 142 }System; 143 class Systemext_com{//基本拓展功能(可能需要初始化) 144 public: 145 storage_com var; 146 comsolve_com comsolve; 147 Systemext_com(){} 148 init(){ 149 var.init(); 150 comsolve.init(); 151 } 152 }Systemext; 153 void out_com::print(string s){ 154 print(s,0); 155 } 156 void out_com::println(string s){ 157 print(s);cout<<endl; 158 } 159 void out_com::print(string s,int from){ 160 int len=s.length(); 161 string s1=s.substr(from,len-from); 162 cout<<s1; 163 } 164 void out_com::println(string s,int from){ 165 print(s,from);cout<<endl; 166 } 167 void in_com::read(string &s){ 168 cin>>s; 169 } 170 void in_com::readln(string &s){ 171 getline(cin,s); 172 } 173 void err_com::throwln(string s){ 174 System.sysio.windowscmd("color 1f"); //color 1 3 9是蓝色 175 System.wel.sysinfo(); 176 System.out.println("System Error:There is a problem:"); 177 System.out.println(s); 178 } 179 void err_com::throwshut(string s,int timeout){ 180 System.err.throwln(s); 181 System.syscore.closetimeout(timeout); 182 } 183 void welcome_com::sysinfo(){ 184 int num1=0,num2=1,num3=5,patch=0; 185 std::stringstream versionstream; 186 versionstream<<"[Version:"<<num1<<"."<<num2<<"."<<num3<<"."<<patch<<"]"; 187 string versionstring; 188 versionstream>>versionstring; 189 System.out.println("[Command Operatoring System]"); 190 System.out.println("[This system is designed by cdsidi.]"); 191 System.out.println(versionstring); 192 /************更新日志*************************** 193 0.0.1: 基本的框架和命令基础 194 0.0.2: 优化了GUI,添加了启动和关闭画面,为fileio做下早期准备 195 0.1.0: 在底层支持了Integer类型 196 0.1.1: 优化了用户交互、完善了代码注释 197 0.1.2: 添加了广告 198 0.1.3:重构代码,将System里面的类 拆分开来,为多文件编程打下基础 199 0.1.4: 1.添加了"cls"指令 用于清屏 200 2. storage 已经支持Integer/Floating/String全类型 201 3. 现在命令首尾如果有空格会自动忽略(trim函数) 202 4.支持通过varinfo string 来输出变量的内容 203 0.1.4 patch 1: 1.修复了bug;添加了 cls 指令在help内 204 0.1.5: 1.添加了syscore_com 类 拆分了welcome_com的一些功能 205 2.整合了开始屏幕和关闭屏幕欢迎信息 206 3.添加了"welcome::about()"包含系统信息和广告 207 4.更改了版本号系统[x.x.x.x] 最后一位是补丁号 208 ***********************************************/ 209 } 210 void welcome_com::advertisements(){ 211 System.out.println("****************以下是广告*************"); 212 System.out.println("_______广告 1_________ "); 213 System.out.println("如果喜欢ComSys,请捐助我 "); 214 System.out.println("如果想投放广告,请联系我 "); 215 System.out.println("https://www.cnblogs.com/cdsidi"); 216 System.out.println("_______广告 2_________ "); 217 System.out.println("现在加入 51C SB 派对!"); 218 System.out.println("****************广告已结束*************"); 219 } 220 void welcome_com::about(){ 221 sysinfo(); 222 advertisements(); 223 } 224 //这里有bug 先不用了 225 /* 226 string comsolve_com::varsolve(string s){ 227 string ret; 228 int len=s.length(), 229 lastplace=-1;//上一个没有配对的varflag位置 230 for(int i=0;i<len;++i){ 231 // printf("lastplace:%d i:%d len:%d ",lastplace,i,len); 232 if(s.at(i)==code_varflag0){ 233 if(lastplace!=-1) { 234 lastplace=i; 235 }else{ 236 string varname=s.substr(lastplace+1,i-(lastplace+1));//恰好删除varflag中间的部分 237 if(!varname.empty()){ 238 string varstr=Systemext.var.getvarstr(varname); 239 ret.erase(lastplace,i-lastplace);//删除ret从lastplace开始,一直到i-1的部分 240 continue; 241 } 242 lastplace=-1; 243 } 244 } 245 ret.push_back(s.at(i)); 246 } 247 return ret; 248 }*/ 249 void comsolve_com::solve1(string s,int left,int code){ 250 int len=s.length(),tmplen=len-left; 251 string tmp=s.substr(left,len-left);//从left一直截取到len(下一步处理的tmp) 252 switch(code){ 253 case code_unknown: 254 System.out.println("Bad command. Please type 'help' for help of commands.");break; 255 case code_print: 256 System.out.println(tmp);break; 257 case code_windowscmd: 258 System.sysio.windowscmd(tmp);break; 259 case code_exit: 260 System.syscore.closesys();break; 261 case code_sysinfo: 262 System.wel.sysinfo();break; 263 case code_help: 264 System.wel.help();break; 265 case code_var: 266 Systemext.var.solve0(tmp);break; 267 case code_cls: 268 System.sysio.cleanscr();break; 269 default: 270 printf("Bad command. "); 271 } 272 } 273 void comsolve_com::solve0(string s){ 274 int len=s.length(); 275 for(int i=0;i<len;++i){//枚举第一级命令的结尾 276 if(is_empty_char(s[i])){//如果[i]是空格 277 string tmp=s.substr(0,i);//不算空格[0,i-1]是否找到一个指令 278 if(commap[tmp]!=0){ 279 solve1(s,i+1,commap[tmp]);//转交下层处理,[i+1,end]跳过空格 280 return; 281 } 282 } 283 } 284 //s没有遇到任何空格,传递整个字符串作为第一级命令,第二级命令是空串 285 solve1(s,len,commap[s]); 286 } 287 void comsolve_com::init(){ 288 basic_command[code_print]="print"; 289 basic_command[code_windowscmd]="windows"; 290 basic_command[code_exit]="exit"; 291 basic_command[code_sysinfo]="sysinfo"; 292 basic_command[code_help]="help"; 293 basic_command[code_var]="var"; 294 basic_command[code_cls]="cls"; 295 for(int i=0;i<Max_basic_command;++i){ 296 commap[basic_command[i]]=i; 297 } 298 } 299 void systemio_com::cleanscr(){ 300 system("cls"); 301 } 302 void welcome_com::welcomescr(string message){//启动和关闭屏幕 (通过message传递) 303 const int cnt_stars=80,cnt_emptyl=8,waitms=3000; 304 System.sysio.cleanscr(); 305 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 306 for(int i=1;i<=cnt_emptyl/2;++i)System.out.print(" "); 307 System.wel.about(); 308 System.out.println(message); 309 for(int i=1;i<=cnt_emptyl-cnt_emptyl/2;++i)System.out.print(" "); 310 for(int i=1;i<=cnt_stars;++i)System.out.print("*"); 311 System.sysio.sleep(waitms); 312 } 313 void welcome_com::help(){ 314 System.out.println("************Start of help*****************"); 315 System.out.println("1. command 'print': "); 316 System.out.println("print {string} System will say {string}."); 317 System.out.println("eg. print Hello!"); 318 System.out.println("2. command 'exit': "); 319 System.out.println("System will close."); 320 System.out.println("eg. exit"); 321 System.out.println("3. command 'sysinfo': "); 322 System.out.println("System will show the information of the System."); 323 System.out.println("eg. sysinfo"); 324 System.out.println("4. command 'help': "); 325 System.out.println("System will show the commands of the System."); 326 System.out.println("eg. help"); 327 System.out.println("5. command 'windows': "); 328 System.out.println("windows {string} system will do it in Windows cmd.exe"); 329 System.out.println("eg. windows echo hello"); 330 System.out.println("6. command 'cls': "); 331 System.out.println("System will clean the screen."); 332 System.out.println("eg. cls"); 333 System.out.println("************End of help*****************"); 334 } 335 void welcome_com::startsys(){ 336 System.sysio.windowscmd("color 0f"); 337 System.wel.welcomescr("Starting..."); 338 System.syscore.initsys(); 339 System.sysio.cleanscr(); 340 System.out.println("System has got ready."); 341 System.syscore.sysmain(); 342 } 343 void syscore_com::initsys(){ 344 Systemext.init(); 345 } 346 void syscore_com::closesys(){ 347 System.sysio.cleanscr(); 348 System.wel.welcomescr("System is shutting down..."); 349 System.out.println("Press any key to exit."); 350 System.sysio.windowscmd("pause >nul"); 351 System.sysio.progexit(0); 352 } 353 void syscore_com::closetimeout(int m_secs){ 354 printf("System will shutdown in %d seconds. Please get ready.",m_secs/1000); 355 Sleep(m_secs); 356 System.syscore.closesys(); 357 } 358 void syscore_com::sysmain(){ 359 string s; 360 while(1){ 361 System.out.print(">"); 362 System.in.readln(s); 363 trim(s);//去掉首尾空格 364 if(!s.empty()) 365 Systemext.comsolve.solve0(s); 366 } 367 } 368 int storage_com::getInteger(string name){ 369 varinfo var=varmap[name]; 370 if(var.type==code_integer){ 371 return Ints[var.address]; 372 }else{ 373 System.err.throwln("Wrong Type."); 374 return 0; 375 } 376 } 377 double storage_com::getFloating(string name){ 378 varinfo var=varmap[name]; 379 if(var.type==code_floating){ 380 return Floats[var.address]; 381 }else{ 382 System.err.throwln("Wrong Type."); 383 return 0; 384 } 385 } 386 string storage_com::getString(string name){ 387 varinfo var=varmap[name]; 388 if(var.type==code_string){ 389 return Strings[var.address]; 390 }else{ 391 System.err.throwln("Wrong Type."); 392 return ""; 393 } 394 } 395 void storage_com::putvalue(string name,long long val){ 396 varinfo var=varmap[name]; 397 if(var.type==code_void){ 398 Ints.push_back(val); 399 var=varinfo(name,code_integer,Ints.size()-1); 400 varmap[name]=var; 401 }else if(var.type==code_integer){//此变量存在 402 Ints[var.address]=val; 403 }else{//注意,以下会出现在内存池中变量的内存泄露 404 Ints.push_back(val); 405 var=varinfo(name,code_integer,Ints.size()-1); 406 varmap[name]=var; 407 //将之前的存储信息覆盖(之前的内存将永远无法用到) 408 } 409 } 410 void storage_com::putvalue(string name,string val){ 411 varinfo var=varmap[name]; 412 if(var.type==code_void){ 413 Strings.push_back(val); 414 var=varinfo(name,code_string,Strings.size()-1); 415 varmap[name]=var; 416 }else if(var.type==code_string){ 417 Strings[var.address]=val; 418 }else{ 419 Strings.push_back(val); 420 var=varinfo(name,code_string,Strings.size()-1); 421 varmap[name]=var; 422 } 423 } 424 void storage_com::putvalue(string name,double val){ 425 varinfo var=varmap[name]; 426 const int type=var.type; 427 if(type==code_void){ 428 Floats.push_back(val); 429 var=varinfo(name,code_floating,Floats.size()-1); 430 varmap[name]=var; 431 }else if(type==code_floating){ 432 Floats[var.address]=val; 433 }else{ 434 Floats.push_back(val); 435 var=varinfo(name,code_floating,Floats.size()-1); 436 varmap[name]=var; 437 } 438 } 439 int storage_com::gettype(string name){ 440 varinfo ret=varmap[name]; 441 return ret.type; 442 } 443 string storage_com::getvarstr(varinfo var){ 444 const int type=var.type,address=var.address; 445 string ret; 446 std::stringstream stream; 447 if(type==code_integer){ 448 stream<<Ints.at(address); 449 }else if (type==code_string){ 450 stream<<Strings.at(address); 451 }else if (type==code_floating){ 452 stream<<Floats.at(address); 453 }else{ 454 return "VOID"; 455 } 456 stream>>ret; 457 return ret; 458 } 459 string storage_com::getvarstr(string name){ 460 varinfo var=varmap[name]; 461 return getvarstr(var); 462 } 463 void storage_com::printvarstr(string name){ 464 System.out.print(getvarstr(name)); 465 } 466 void storage_com::printvarstrln(string name){ 467 System.out.println(getvarstr(name)); 468 } 469 /*下面这里我没看明白 ,先暂时不用了 */ 470 void storage_com::solve0(string s){//s是storage命令处理 471 int len=s.length(); 472 for(int i=0;i<len;++i){//枚举i,一直到结尾 473 if(!is_empty_char(s[i])){//空白[i] 474 string tmp=s.substr(0,i);//不算空白[0,i-1]是否找到变量名 475 varinfo tmpinfo=varmap[tmp]; 476 if(tmpinfo.type!=0){//如果这个变量存在 477 //solve1(s,i+1,tmpinfo);//转交下层处理,[i+1,end]跳过空白 478 return;//该命令运行完毕 479 } 480 } 481 } 482 System.out.println("Bad type."); 483 } 484 void storage_com::init(){ 485 vector<Integer>().swap(Ints); 486 vector<Floating>().swap(Floats); 487 vector<String>().swap(Strings); 488 map<string,varinfo>().swap(varmap); 489 } 490 int main(){ 491 System.wel.startsys(); 492 return 0; 493 }