Boost学习笔记 -- 字符串与文本处理

本文介绍了Boost库中的三个常用组件:lexical_cast用于基本类型的转换,format提供格式化输出,string_algo则是一个强大的字符串处理库,支持多种字符串算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lexical_cast

使用lexical_cast

#include <boost/lexical_cast.hpp>
using namespace boost;

sample

int x = lexical_cast< int >( "100" );
long y = lexical_cast< long >( "2000" );
float pai = lexical_cast< float >( "3.14159e5" );
double e = lexical_cast< double >( "2.71828" );

string str = lexical_cast< string >( 456 );         // "456"
string str1 = lexical_cast< string >( 0.618 );      // "0.6179999999999999"
string str2 = lexical_cast< string >( 0x10 );       // "16"

注意,要转换成数字的字符串只能有数字和小数点,不能出现字母(表示指数的e/E除外)或其他非数字字符,例如不能是”123L”, “0x100”。如果需要更高级的格式控制,则需要使用std::stringstream或者boost::format。

format

使用format

#include <boost/format.hpp>
using namespace boost;

sample

cout << format("%s:%d+%d=%d\n") % "sum" % 1 % 2 % ( 1 + 2 );    // sum:1+2=3
format fmt( "(%1% + %2%) * %2% = %3%\n" );                  
fmt % 2 % 5;
fmt % ( ( 2 + 5 ) * 5 );
cout << fmt.str();              // (2 + 5) * 5 = 35

格式化语法

  • %05d: 输出宽度为5的整数,不足位用0填充;
  • %-8.3f: 输出左对齐,总宽度为8,小数位3位的浮点数;
  • % 10s: 输出10位的字符串,不足位用空格填充;
  • %05X: 输出宽度为5的大写16进制整数,不足位用0填充;
format fmt( "%05d\n%-8.3f\n% 10s\n%05X\n" );
cout << fmt % 62 % 2.236 % "123456789" % 48;

result:
00062
2.236
123456789
00030

format的性能

printf()不进行类型检查,直接向stdout输出,因此它的速度非常快,而format较printf()做了很多安全检查的工作,因此性能略差,速度上要慢很多。
如果很在意format的性能,可以先建立const format对象,然后复制这个对象进行格式化操作,这样比直接使用format对象能够提高速度:

const format fmt( "%10d %020.8f %010X %10.5e\n" );
cout << format( fmt ) % 62 % 2.236 %255 % 0.618;

string_algo

string_algo是一个非常全面的字符串算法库,可以在不使用正则表达式的情况下处理大多数字符串相关问题。

用法

string_algo库位于boost::algorithm,但被using语句引入到了名字空间boost

#include <boost/algorithm/string.hpp>
using namespace boost;

sample

string str( "readme.txt" );
if( ends_with( str, "txt" ) ) {
    cout << to_upper_copy( str ) + " UPPER" << endl;
    assert( ends_with( str, "txt" ) );
}

replace_first( str, "readme", "followme" );
cout << str << endl;

vector<char> v( str.begin(), str.end() );
vector<char> v2 = to_upper_copy( erase_first_copy( v, "txt" ) );
for( auto ch : v2 ) {
    cout << ch;
}

result:
README.TXT UPPER
followme.txt
FOLLOWME.

string_algo概述

符合boost.range要求的容器都可以被string_algo处理。
string_algo库中的算法命名遵循了标准库的惯例,使用不同的扩展来区分不同的版本,规则是:

  • 前缀i:有此前缀表明算法是大小写不敏感的,否则是大小写敏感的;
  • 后缀_copy: 表明算法不变动输入,返回处理结果的复制,否则算法改变输入;
  • 后缀_if:表明算法需要一个作为判断式的谓词函数对象,否则使用默认的判断标准;

string_algo提供的算法分为5大类:

  • 大小写转换;
  • 判断式与分类;
  • 修剪;
  • 查找与替换;
  • 分割与合并;
资源下载链接为: https://pan.quark.cn/s/790f7ffa6527 在一维运动场景中,小车从初始位置 x=-100 出发,目标是到达 x=0 的位置,位置坐标 x 作为受控对象,通过增量式 PID 控制算法调节小车的运动状态。 系统采用的位置迭代公式为 x (k)=x (k-1)+v (k-1) dt,其中 dt 为仿真过程中的恒定时间间隔,因此速度 v 成为主要的调节量。通过调节速度参数,实现对小车位置的精确控制,最终生成位置 - 时间曲线的仿真结果。 在参数调节实验中,比例调节系数 Kp 的影响十分显著。从仿真曲线可以清晰观察到,当增大 Kp 值时,系统的响应速度明显加快,小车能够更快地收敛到目标位置,缩短了稳定时间。这表明比例调节在加快系统响应方面发挥着关键作用,适当增大比例系数可有效提升系统的动态性能。 积分调节系数 Ki 的调节则呈现出不同的特性。实验数据显示,当增大 Ki 值时,系统运动过程中的波动幅度明显增大,位置曲线出现更剧烈的震荡。但此同时,小车位置的变化速率也有所提高,在动态调整过程中能够更快地接近目标值。这说明积分调节虽然会增加系统的波动性,但对加快位置变化过程具有积极作用。 通过一系列参数调试实验,清晰展现了比例系数和积分系数在增量式 PID 控制系统中的不同影响规律,为优化控制效果提供了直观的参考依据。合理匹配 Kp 和 Ki 参数,能够在保证系统稳定性的同时,兼顾响应速度和调节精度,实现小车位置的高效控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值