string中英文本元

2021-08-26 07:12:59 字數 1471 閱讀 4472

在c++中字串類的string的模板原型是basic_string

template

<

class

_elem,

class

traits

=char_traits

<

_elem

>

,class

_ax=

allocator

<

_elem

>>

class

basic_string;

第乙個引數_elem表示型別。第二個引數traits的預設值使用char_traits型別,定義了型別和字元操作的函式,如比較、等價、分配等。第三個引數_ax的預設值是allocator類,表示了記憶體模式,不同的記憶體結構將操作指標的不同行為,例如棧、堆或段記憶體模式等。

在c++標準裡定義了兩個字串string和wstring

typedefbasic_string

<

char

>

string

;typedefbasic_string

<

wchar_t

>

wstring;

前者string是常用型別,可以看作char,其實這正是與string定義中的_elem=char相一致。而wstring,使用的是wchar_t型別,這是寬字元,用於滿足非ascii字元的要求,例如unicode編碼,中文,日文,韓文什麼的。對於wchar_t型別,實際上c++中都用與char函式相對應的wchar_t的函式,因為他們都是從同乙個模板類似於上面的方式定義的。因此也有wcout, wcin, werr等函式。

實際上string也可以使用中文,但是它將乙個漢字寫在2個char中。而如果將乙個漢字看作乙個單位wchar_t的話,那麼在wstring中就只占用乙個單元,其它的非英文文字和編碼也是如此。這樣才真正的滿足字串操作的要求,尤其是國際化等工作。

看一下下面的程式,就會理解兩者的差別。

#include

<

iostream

>

#include

<

string

>

using

namespace

std;

#define

tab"/t"

intmain()

結果如下:

下面的輸出說明了,如何正確使用string和wstring的方法。第三個因為使用string來表示漢字,出現了一些錯誤。最後一行也是錯誤,導致了輸出也受到了影響,沒有空格與回車。(最後兩個就不要管中英文了,僅僅說明一下中文構造方法是錯誤的)

《掌握標準c++類》在第十二章《語言支援》中專門講c++的國際化和本地化問題,c++提供了i18n的標準處理,軟體開發者可以參考。

中英文本元混合處理方法

1,txt檔案匯入sql時 303410001401?600 lang 4 t粵ig?0220?011840628900000?bpo 303410001501?600 landau中er?0220?011840628900000?bpo 303410001601?600 lang 6 t漢ig?0...

中英文本串中統計英文本元個數

工作中遇到如下問題,搜尋網路資源得以解決,記錄以供參考。問題 在一段中英文混合的字串中,通過關關鍵字查詢到某位置p。需要擷取p前後一定長度字元,構成乙個新的字串。問題解析 由於是中貢混合的字串,當向前後擷取長度不當時會出現擷取到中文半個字的情況。面引起出現亂碼的情況。方法 首先確定字串的編碼格式,由...

python中的中英文本元統計

英語字元和中文字元的區別在於 大小寫字元和字元個數 中文中是乙個詞語 統計英語字元 def gettext txt open halmet.txt r read txt txt.lower 文中所有英語小寫 for ch in txt txt.replace ch,return txt halmet...