C++ 之 【String常用接口—find,replace】

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

 

https://blog.csdn.net/LM_18391680291/article/details/89286639

 

例:

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));

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值