亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++實現高性能轉換大小寫算法示例

2020-05-23 13:31:43
字體:
來源:轉載
供稿:網友

簡述

最近工作中遇到一個需求,是需要將URL中的 query 參數的key全部轉換為小寫或者大寫,鍵值對的數量有點多,但全部都是英文字母,無需考慮非字母的情況。

實現比較快的做法是使用STL或C標準庫中的轉換接口,如下:

#include <string> #include <cctype> #include <algorithm>// 字符串中的大寫字符轉小寫std::string strtolower(std::string s){ transform(s.begin(), s.end(), s.begin(), ::tolower); return s;}// 字符串中的小寫字符轉大寫std::string strtoupper(std::string s){ transform(s.begin(), s.end(), s.begin(), ::toupper); return s;}

這個方法雖然很好,但是效率不是很高。

分析了一下ascii碼的碼值,發現大小寫字母的ascii碼之間是有規律的。

原理

英文字母的ASCII碼值表示如下

C++,大小寫,算法

對比一下其二進制形式

C++,大小寫,算法

從對比的結果可以看出, 大寫字母與小寫字母的差別 僅是 一個比特位的不同 。

因為它們的這個規律,可以寫出下面的轉換函數(如果輸入不是字母,轉出的結果會有錯誤)

可以查看數字 0-9 的ascii碼值,可以看出它們的第6位都是0,所以轉為小寫的算法不會影響數字的值。

轉小寫算法中受到影響的,只有ascii碼二進制表示中第六位為0的部分。其中非字母部分如下表

C++,大小寫,算法

#include <iostream>#include <string>#include <stdint.h>// 更優化std::string strtoupper(std::string s){ if(s.empty()){return s;} size_t len = s.size() + 1; size_t alignlen = len + 8 - (len % 8); s.resize(alignlen); size_t ec = alignlen / 8; uint64_t* p8 = (uint64_t*)s.data(); for(size_t i=0;i<ec;++i){ p8[i] &= 0xDFDFDFDFDFDFDFDF; } s.resize(len-1); return s;}// 未做進一步優化std::string strtolower(std::string s){ size_t len = s.size(); size_t ec = len /8; uint64_t* p8 = (uint64_t*)s.data(); for(size_t i=0;i<ec;++i){ p8[i] |= 0x2020202020202020; } uint8_t* p1 = (uint8_t*)(p8 + ec); len %= 8; for(size_t i=0;i<len;++i){ p1[i] |= 0x20; } return s;}

性能測試

測試代碼如下:

int main(){ //std::cout << "Hello, world!/n"; for(size_t i=0;i<1000000;++i){ std::string s = strtoupper("qwertyuiopasdfghjklzxcvbnm````````QWERTYUIOPASDFGHJKLZXCVBNM"); //std::cout<<s<<std::endl; s = strtolower("qwertyuiopasdfghjklzxcvbnm/t/t/t/t/t/t/t/tQWERTYUIOPASDFGHJKLZXCVBNM"); //std::cout<<s<<std::endl; } return 0;}

-- 編譯時候請勿優化,否則可能被優化掉! --

測試結果如下:

使用STL算法

STL算法部分主要由頭文件<algorithm>,<numeric>,<functional>組成。要使用 STL中的算法函數必須包含頭文件<algorithm>,對于數值算法須包含<numeric>,<functional>中則定義了一些模板類,用來聲明函數對象。

STL中算法大致分為四類:

       1、非可變序列算法:指不直接修改其所操作的容器內容的算法。

       2、可變序列算法:指可以修改它們所操作的容器內容的算法。

       3、排序算法:包括對序列進行排序和合并的算法、搜索算法以及有序序列上的集合操作。

       4、數值算法:對容器內容進行數值計算。

結果如下

time ./teststl./teststl 7.88s user 0.03s system 100% cpu 7.904 total

自寫代碼測試結果如下

time ./test./test 0.93s user 0.00s system 99% cpu 0.928 total

可以看到,其性能有差異。(應用場景有限)

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品日韩美女的视频高清| 日韩精品免费综合视频在线播放| 日韩av中文字幕在线免费观看| 亚洲欧洲日产国码av系列天堂| 欧美专区国产专区| 国内精品久久久久影院 日本资源| 国产一区欧美二区三区| 538国产精品视频一区二区| 亚洲最大福利视频| 92国产精品视频| 亚洲欧洲成视频免费观看| 最新国产精品亚洲| 亚洲精品少妇网址| 国产精品99久久久久久www| 亚洲国产精品悠悠久久琪琪| 91av免费观看91av精品在线| 中文字幕9999| 一区二区三区黄色| 日本久久久久久久久久久| 亚洲色图50p| 日韩亚洲第一页| 亚洲成人精品视频在线观看| 色香阁99久久精品久久久| 国产精品久久久久久久久| 成人女保姆的销魂服务| 欧美成人午夜剧场免费观看| 中国人与牲禽动交精品| 国产精品劲爆视频| 亚洲国产精品专区久久| 亚洲精品一区二区三区不| 日韩激情视频在线| 国产欧美日韩最新| 久久精品免费播放| 亚洲一区二区中文字幕| xx视频.9999.com| 久久久久久久电影一区| 亚洲91av视频| 亚洲男人天堂九九视频| 亚洲国产高潮在线观看| 久久久精品视频成人| 正在播放欧美一区| 国产日产亚洲精品| 91精品国产高清久久久久久久久| 中文字幕久精品免费视频| 中文字幕av一区中文字幕天堂| 国模精品视频一区二区| 色噜噜亚洲精品中文字幕| 神马久久桃色视频| 日本久久久a级免费| 亚洲国产一区二区三区在线观看| 亚洲成人性视频| 97免费视频在线| 国产精品午夜一区二区欲梦| 日韩美女视频在线观看| 黑人巨大精品欧美一区二区三区| 国产精品一区二区三区在线播放| 欧美电影在线观看完整版| 日本一区二区三区在线播放| 欧洲永久精品大片ww免费漫画| 清纯唯美亚洲激情| 中文字幕日韩在线播放| 久久夜精品va视频免费观看| 日韩欧美精品网址| 欧美午夜宅男影院在线观看| 国产精品18久久久久久麻辣| 亚洲无限乱码一二三四麻| 日韩小视频在线观看| 久久精品国产v日韩v亚洲| www.欧美视频| 57pao成人国产永久免费| 国产亚洲视频在线| 久久视频在线免费观看| 精品视频久久久久久| 日韩欧美亚洲一二三区| 国产日韩精品综合网站| www.亚洲天堂| 欧美亚洲视频在线看网址| 日韩精品在线观看视频| 国产精品久久久久久av| 亚洲精品欧美日韩专区| 中文字幕视频在线免费欧美日韩综合在线看| 欧美美女操人视频| 热久久99这里有精品| 精品福利一区二区| 一本一道久久a久久精品逆3p| 黄色一区二区三区| 亚洲高清在线观看| 国产在线视频一区| 亚洲国产精品久久| 精品偷拍各种wc美女嘘嘘| 国产精品99久久99久久久二8| 亚洲第一免费播放区| 韩国福利视频一区| 亚洲性生活视频| 久久69精品久久久久久国产越南| 国产精品欧美亚洲777777| 91精品视频免费| 欧美精品一区二区三区国产精品| 国产一区二区激情| 欧美成人在线免费视频| 日日狠狠久久偷偷四色综合免费| 成人激情视频在线播放| 欧美丝袜一区二区三区| 国产香蕉精品视频一区二区三区| 亚洲在线第一页| 亚洲精品久久久一区二区三区| 岛国精品视频在线播放| 18性欧美xxxⅹ性满足| 成人精品一区二区三区电影黑人| 亚洲欧美综合图区| 国产激情久久久| 精品视频中文字幕| 国产97色在线|日韩| 国产精品夫妻激情| 久久天天躁日日躁| 久久视频在线播放| 国产精品久久久久久久7电影| 久久五月天综合| 亚州国产精品久久久| 亚洲97在线观看| 精品中文字幕久久久久久| 超碰日本道色综合久久综合| 国产69久久精品成人| 精品亚洲va在线va天堂资源站| 色噜噜狠狠狠综合曰曰曰| 欧美成年人网站| 最近中文字幕mv在线一区二区三区四区| 中文字幕欧美日韩| 日韩欧美一区二区三区久久| 日韩视频永久免费观看| 青草青草久热精品视频在线网站| 亚洲国产精品久久久久久| 1769国内精品视频在线播放| 北条麻妃99精品青青久久| 在线观看91久久久久久| 亚洲精品美女久久久久| 97精品一区二区视频在线观看| 国产精品揄拍500视频| 国产精品视频久久久| 中文字幕日韩专区| 韩曰欧美视频免费观看| 久久久久www| 日韩美女写真福利在线观看| 国产色婷婷国产综合在线理论片a| 国产精品爱啪在线线免费观看| 久久国产精品首页| 久久人人爽人人爽人人片av高请| 日本三级韩国三级久久| 国产精品热视频| 欧美综合激情网| 国产日本欧美一区二区三区在线| 庆余年2免费日韩剧观看大牛| 日本伊人精品一区二区三区介绍| 久久久免费在线观看| 在线观看不卡av| 国产不卡精品视男人的天堂| 91香蕉国产在线观看| 欧美国产日韩中文字幕在线| 91成人在线视频| 久久中文字幕视频| 精品美女国产在线| 亚洲中国色老太| 亚洲精品一区二区三区婷婷月| 亚洲国产成人在线视频|