C++沒(méi)有trim為什么不自己造一個(gè)呢?
C++沒(méi)有trim為什么不自己造一個(gè)呢?
省流:因?yàn)榫幋a
C++的標(biāo)準(zhǔn)里面是沒(méi)有現(xiàn)在語(yǔ)言中的字符串的。C++的string其實(shí)是字節(jié)數(shù)組,里面沒(méi)有取第i個(gè)字符的功能,只有取第i個(gè)字節(jié)的功能。他不區(qū)分里面內(nèi)容的編碼,也不保證里面的內(nèi)容一定是有效的編碼。
最近很多小伙伴找我,說(shuō)想要一些C++資料,然后我根據(jù)自己從業(yè)十年經(jīng)驗(yàn),熬夜搞了幾個(gè)通宵,精心整理了一份「C++專(zhuān)業(yè)入門(mén)到高級(jí)教程+工具包」,點(diǎn)個(gè)關(guān)注,全部無(wú)償共享給大家?。?!
評(píng)論區(qū)回復(fù)“888”,關(guān)注我之后私信回復(fù)“666”,即可拿走。
而現(xiàn)代編程語(yǔ)言一般會(huì)區(qū)分字符串和字節(jié)數(shù)組。對(duì)于字符串,經(jīng)過(guò)取舍發(fā)現(xiàn)還是按照變長(zhǎng)編碼比較好。Go和Rust的字符串是UTF-8變長(zhǎng)編碼,而Python設(shè)計(jì)得早一些加上是動(dòng)態(tài)類(lèi)型解釋型語(yǔ)言,默認(rèn)字符串存unicode,可以動(dòng)態(tài)編碼成其他編碼的字符串。
由于C++的string在使用的時(shí)候,程序并不知道它的編碼,所以并不存在一個(gè)一定正確的trim函數(shù)的實(shí)現(xiàn)。如果從前后分別一個(gè)字節(jié)一個(gè)字節(jié)的找直到遇到非空白符的ascii碼,在ascii和utf8編碼的字符串上是正確的,但是在utf16上就需要兩個(gè)字節(jié)兩個(gè)字節(jié)找了,而在其他編碼下有可能會(huì)把某個(gè)字符的其中某個(gè)字節(jié)當(dāng)成空白符從而導(dǎo)致bug。
由于C++標(biāo)準(zhǔn)里還沒(méi)有很好的處理編碼問(wèn)題,所以trim函數(shù)還沒(méi)法進(jìn)入標(biāo)準(zhǔn)。