C++ 完成Client分页显示log

分页显示t_log

1、获取用户的输入

1.1、写一个Input成员函数,处理输入进来的语句

std::string XClient::Input()
{
    //清空缓冲
    //cin.ignore(4096, '\n');
    string input = "";
    for (;;)
    {
        char a = getchar();
        if (a <= 0 || a == '\n' || a == '\r')
            break;
        cout << "*" << flush;
        input += a;
    }
    return input;
}

 1.2、将获取到的输入,传给cmd。定义vector容器,将得到的cmd输入进行分割,通过空格将内容分割成一块一块的。将分割好的内容写入vector容器里面

    for (;;)
    {
        cout << "Input: " << flush;
        string cmd = Input();
        cout << cmd << endl;
        //格式 log 1 10 第一页  1页10行
        //切割空格   通过空格把内容切成一块一块的
        vectorcmds;
        char* p = strtok((char*)cmd.c_str(), " ");
        while (p)
        {
            cmds.push_back(p);
            p = strtok(0, " ");
        }
        string type = cmd;
        if (cmds.size() > 0)
            type = cmds[0];
        if (type == "log")
        {
            c_log(cmds);            
        }
    }

C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

参数

  • str -- 要被分解成一组小字符串的字符串。
  • delim -- 包含分隔符的 C 字符串。

2、将得到的内容进行分页展示

//log 1 10 第一页 每页10条
void XClient::c_log(std::vector cmds)
{
    int pagecount = 10;
    int page = 1;
    if (cmds.size() > 1)
        page = atoi(cmds[1].c_str());
    if (cmds.size() > 2)
        pagecount = atoi(cmds[2].c_str());

    cout << "In log" << endl;
    //limit 0 10 从0开始取10条语句
    string sql = "select * from t_log limit ";
    stringstream ss;
    ss <GetResult(sql.c_str());
    //遍历每一行
    for (auto row : rows)
    {//遍历每一个字段 遍历每一列
        for (auto c : row)
        {
            //打印出来
            cout << c.data << " ";
        }
        cout << endl;
    }
    //int total = 0;
   // cout << "Total: " << total << endl;
    cout << "page= " << page << " pagecount=" << pagecount << endl;
}

3、测试

3.1、输入log 6 5(其中log就是想要读取的字段,也就是cmds[0],6是第6页,5是每页5条数据  (也就是现有的log将它分为每页是5条数据)

3.2、分析结果,现在分页的是第6页,那么他应该从26条数据开始

select *from t_log limit 25,5

C++ 完成Client分页显示log_第1张图片

你可能感兴趣的:(c++,服务器,算法)