C++可复用代码:命令行控制模块(3)

重点说下getOrder()这个函数,该函数实现的功能是:

1.接收一行用户输入。

2.根据空格将用户输入分割成字符串数组。数组中下标为0的元素的第一个字符存储的是一个整型变量,代表有效字符串数,即一条命令及其所带参数所对应的字符串数。

代码:

string* CmdControl<T>::getOrder(){

string order;//该字符串是用户输入的原始字符串,包括空格符

getline(cin,order);

int num = 1;

deque<string> orders;//以空格为分隔符,将截取到的子串存入该容器中

int from = 0;//子串头部下标

int len = 1;//子串长度

for(int i = 0; i < order.size();i++){

if(order[i] == ' '){//读到空格符时将之前标记的字符串存入容器

orders.push_back(order.substr(from,len-1));

from = i+1;

len = 1;

num++;

}

else len++;

}orders.push_back(order.substr(from));//存入读得的最后一个子串

string *result = new string[num+1];//result是要返回的字符串数组,预留出0号单元

result[0].append(1,(char)num);//0号字符串存储的是数量信息

deque<string>::iterator itr = orders.begin();

for(int i = 1;i <= num; i++){//将容器里的字符串存入result数组

result[i] = *itr;

itr++;

}

return result;

}

最后是run函数,该函数调用getOrder与match函数进行命令的匹配及对应函数调用:

void run() {

running = true;

while(running){

cout<<prompt<<":";//输出命令行提示符

string *orderInput = getOrder();

if(orderInput[1].length() == 0) continue;//用户仅只敲了个回车

//将加工后的参数数据传递给相应函数

int funNum = match(orderInput[1]);//若未匹配得内置命令则返回-1

if(funNum == -1) cout<<cmdNotExist<<endl;//并输出自定义的错误提示信息

//否则funNum为命令在cmdList中的下标,并调用相应函数执行命令功能

else running = (holder.*(cmdList[funNum].fun))(orderInput);

}

}

可能在多道程序环境中这个应该写成一个线程,但现在还没去实现它。

源代码的下载链接

免费下载地址在

用户名与密码都是

具体下载目录在 /2012年资料/12月/22日/C++可复用代码:命令行控制模块

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/83394c5ec77756a40108edccc6a71ec2.html