经过修改:
1) 命令和参数之间由任意数量的空格和Tab建隔开
2) 支持简单的//注释符
代码如下
//循环运行每一条脚本
for(size_t line = 0;line !=scriptSize; ++line)
{
//得到当前脚本
string currentScript=GetCurrentScript(line);
if(currentScript.size()<=3)
continue;
//得到当前脚本的命令
string command=GetCommand(currentScript);
//根据命令不同,执行方式也不同
if(command==COMMAND_PRINTSTRING)
{
//得到string参数
string param=GetStringParam(currentScript);
assert(currentScript.empty());
cout<<'/t'<<param<<endl;
}
else if(command == COMMAND_PRINTSTRINGLOOP)
{
//得到string参数
string param=GetStringParam(currentScript);
//得到int参数
int loopNum=GetIntParam(currentScript);
assert(currentScript.empty());
for(int i=0;i<loopNum;++i)
cout<<'/t'<<param<<endl;
}
else if(command == COMMAND_NEWLINE)
{
assert(currentScript.empty());
cout<<endl;
}
else if(command == COMMAND_WAITFORKEYPRESS)
{
assert(currentScript.empty());
//_kbhit returns a nonzero value if a key has been pressed. Otherwise, it returns 0.
while(!kbhit())
;
}
else
{
printf("/tError: Invalid command./n");
break;
}
}
}
string & GetCurrentScript(size_t line)
{
return script[line];
}
string GetCommand( string& currentScript)
{
string command;
for(size_t i=0;currentScript[i]!=' ' && i!=currentScript.size();++i)
command.push_back(currentScript[i]);
currentScript.erase(0,command.size());
DeleteSpaces(currentScript);
return command;
}
int GetIntParam( string& currentScript)
{
string loopNumString;
assert(isdigit(currentScript[0]));
for(size_t i=0;i!=currentScript.size() && currentScript[i]!=' ' && currentScript[i]!='/t';++i)
{
loopNumString.push_back(currentScript[i]);
}
int loopNum=atoi(loopNumString.c_str());
currentScript.erase(0,loopNumString.size());
DeleteSpaces(currentScript);
return loopNum;
}
string GetStringParam( string& currentScript)
{
int flag=0;//1表示有1个" 2表示有2个"
string param;
assert(currentScript[0]== '"');//第一个字符应该是"
for(size_t i=currentScript.find('"'); i < currentScript.size();++i)
{
param.push_back(currentScript[i]);
if(currentScript[i] == '"')
flag++;
if(flag == 2)
break;
}
currentScript.erase(0,param.size());
DeleteSpaces(currentScript);
return param;
}