<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在用C++編寫程式碼時,經常需要用到字串拼接及格式化,尤其是在拼寫sql語句時,目前大部分sql拼接方式都是通過ostringstream流一點一點拼接的,程式碼可讀性很差而且很容易拼接錯誤
ostringstream sqlstr; sqlstr << "insert into virtual_item_info(id, platform, typeid, name, icon_url, act_url, " "desc_text, vm_typeid, vm_price, val_typeid, val_count, priority, show_type, param, " "combo, area, " "onshelf_time, offshelf_time, status, show_url, svga_url, mp4_url, remarks_info, " "shading_url, utime, has_green_dot, act_id, " "act_name, act_icon, act_name_lang_id, act_start_time, act_end_time, item_level, " "distribute_src, buy_to_use_duration, noble_lvl, name_lang_id, desc_lang_id, " "target_whitelist_id, target_whitelist_type, is_cp_shareable, act_link_type, " "act_show_type, item_lang_code)" << "values(" << item.id << "," << item.platform << "," << item.atypeid << ",'" << EscapeString(item.name) << "','" << EscapeString(item.iconurl) << "','" << EscapeString(item.actUrl) << "','" << EscapeString(item.desctext) << "'," << item.vmtypeid << "," << item.vmprice << "," << item.valtypeid << "," << item.valcount << "," << item.priority << "," << item.showType << ",'" << EscapeString(item.param) << "'," << item.isCombo << ",'" << EscapeString(item.area) << "'," << item.onshelftime << "," << item.offshelftime << "," << item.status << ",'" << EscapeString(item.showUrl) << "','" << EscapeString(item.svgaUrl) << "','" << EscapeString(item.mp4Url) << "','" << EscapeString(item.remarksInfo) << "', '" << EscapeString(item.shadingUrl) << "', " << butil::gettimeofday_s() << "," << item.hasGreenDot << ",'" << EscapeString(item.actId) << "','" << EscapeString(item.actName) << "','" << EscapeString(item.actIcon) << "','" << EscapeString(item.actNameLangId) << "'," << item.actStartTime << "," << item.actEndTime << "," << item.itemLevel << "," << item.distributeSrc << "," << item.buyToUseDuration << "," << item.nobleLevel << ",'" << EscapeString(item.nameLangId) << "','" << EscapeString(item.descLangId) << "','" << EscapeString(item.targetGroupWhiteListId) << "'," << item.targetGroupWhiteListType << "," << item.isCpShareable << "," << item.actLinkType << "," << item.actShowType << ",'" << EscapeString(item.itemLangCode) << "')";
參考python字串格式化方式
"{} {}".format("hello", "world")
先寫出完整的字串,在需要替換的位置通過預留位置{}保留, 最後將預留位置替換為指定的引數
本質是基於遞迴依次將字元轉中的預留位置{}替換為對應的引數
class StringUtil { private: // 遞迴出口 static void BuildFormatString(std::ostringstream& builder, const std::string& fmt_spec, std::string::size_type idx) { builder.write(fmt_spec.data() + idx, fmt_spec.size() - idx); } template <typename T, typename... Types> static void BuildFormatString(std::ostringstream& builder, const std::string& fmt_spec, std::string::size_type idx, const T& first, const Types&... args) { auto pos = fmt_spec.find_first_of("{}", idx);a if (pos == std::string::npos) { builder.write(fmt_spec.data() + idx, fmt_spec.size() - idx); return; } builder.write(fmt_spec.data() + idx, pos - idx); builder << first; BuildFormatString(builder, fmt_spec, pos + 2, args...); } public: /** * C++實現python風格字串格式化 */ template <typename... Types> static std::string FormatString(const std::string& fmt_spec, const Types&... args) { std::ostringstream builder; BuildFormatString(builder, fmt_spec, 0, args...); return builder.str(); } };
uint32_t ts = butil::gettimeofday_s(); string sql_formattor = "insert into tbl_user_relation_info(uid, gift_id, batch_id, relation_id, crc32_relation_id, status, peer_uid, relation_create_time, create_time, update_time, order_id) values({}, {}, {}, '', 0, 0, 0, 0, {}, {}, '{}')"; string sql = StringUtil::FormatString(sql_formattor, uid, giftId, batchId, ts, ts, orderId);
到此這篇關於更優雅的C++字串格式化實現方法詳解的文章就介紹到這了,更多相關C++字串格式化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45