C++ 之 【String常用接口—find,replace】
发布日期:2021-11-03 21:19:25 浏览次数:12 分类:技术文章

本文共 2210 字,大约阅读时间需要 7 分钟。

可以将string中的内容进行定点替换。这样string可以写成模板,将变量位置写成自定义变量名,具体使用时,对变量名进行查找与替换。

 

 

例:

static const int32_t MULT_JOINTSTATE_ = 1000000;

static const std::string JOINT_STATE_REPLACE("{
{JOINT_STATE_REPLACE}}");
static const std::string SERVO_J_REPLACE("{
{SERVO_J_REPLACE}}");
static const std::string SERVER_IP_REPLACE("{
{SERVER_IP_REPLACE}}");
static const std::string SERVER_PORT_REPLACE("{
{SERVER_PORT_REPLACE}}");
static const std::string POSITION_PROGRAM = R"(
def driverProg():
    MULT_jointstate = {
{JOINT_STATE_REPLACE}}

    SERVO_IDLE = 0

    SERVO_RUNNING = 1
    cmd_servo_state = SERVO_IDLE
    cmd_servo_q = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    
    def set_servo_setpoint(q):
        enter_critical
        cmd_servo_state = SERVO_RUNNING
        cmd_servo_q = q
        exit_critical
    end
    
    thread servoThread():
        state = SERVO_IDLE
        while True:
            enter_critical
            q = cmd_servo_q
            do_brake = False
            if (state == SERVO_RUNNING) and (cmd_servo_state == SERVO_IDLE):
                do_brake = True
            end
            state = cmd_servo_state
            cmd_servo_state = SERVO_IDLE
            exit_critical
            if do_brake:
                stopj(1.0)
                sync()
            elif state == SERVO_RUNNING:
                servoj(q, {
{SERVO_J_REPLACE}})
            else:
                sync()
            end
        end
    end

  socket_open("{

{SERVER_IP_REPLACE}}", {
{SERVER_PORT_REPLACE}})

  thread_servo = run servoThread()

  keepalive = 1
  while keepalive > 0:
      params_mult = socket_read_binary_integer(6+1)
      if params_mult[0] > 0:
          q = [params_mult[1] / MULT_jointstate, params_mult[2] / MULT_jointstate, params_mult[3] / MULT_jointstate, params_mult[4] / MULT_jointstate, params_mult[5] / MULT_jointstate, params_mult[6] / MULT_jointstate]
          keepalive = params_mult[7]
          set_servo_setpoint(q)
      end
  end
  sleep(.1)
  socket_close()
  kill thread_servo
end
)";

 

 

std::string res(POSITION_PROGRAM);

res.replace(res.find(JOINT_STATE_REPLACE), JOINT_STATE_REPLACE.length(), std::to_string(MULT_JOINTSTATE_));

 std::ostringstream out;

 out << "t=" << std::fixed << std::setprecision(4) << servoj_time_;
 if (version_3)
   out << ", lookahead_time=" << servoj_lookahead_time_ << ", gain=" << servoj_gain_;

 res.replace(res.find(SERVO_J_REPLACE), SERVO_J_REPLACE.length(), out.str());

 res.replace(res.find(SERVER_IP_REPLACE), SERVER_IP_REPLACE.length(), reverse_ip);
 res.replace(res.find(SERVER_PORT_REPLACE), SERVER_PORT_REPLACE.length(), std::to_string(reverse_port));

 

转载地址:https://blog.csdn.net/wjydym/article/details/95031756 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:socket 之【从套接字返回本地ip】
下一篇:多线程编程——条件变量(Condition Variable)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月15日 05时11分32秒