共找到3條詞條名為string的結果 展開
- java等編程語言中的字元串
- Javascript中string的用法
- 英語單詞
string
java等編程語言中的字元串
string是C++、java、VB等編程語言中的字元串,字元串是一個特殊的對象,屬於引用類型。在java、C#中,String類對象創建后,字元串一旦初始化就不能更改,因為string類中所有字元串都是常量,數據是無法更改,由於string對象的不可變,所以可以共享。對String類的任何改變,都是返回一個新的String類對象。C++標準庫中string類以類型的形式對字元串進行封裝,且包含了字元序列的處理操作。
String就是C++、java等編程語言中的字元串,用雙引號引起來的幾個字元。如"Abc","一天".
String類是不可變(final)的,對String類的任何改變,都是返回一個新的String類對象。這樣的話把String類的引用傳遞給一個方法,該方法對String的任何改變,對原引用指向的對象沒有任何影響,這一點和基本數據類型相似.
String s1,s2;
s1 = "abc";
s2 = s1;
s2 = "def";
//這樣操作之後s1還是"abc",s2則是"def",s1不受s2的影響.
string a = "hello,word!";
string b = "hello,word!";
string c = "hello!";
string a = "hello,word!";
string b = "hello,word!";
string c = "hello!";
a 和 b 是不是指向同一個地址呢,這個問題在各論壇都是談論很激烈,其實很簡單,跟下這些字元串的內存地址就好了
string a = "hello,word!";
00000042 mov eax,dword ptr ds:[02A62208h]
00000048 mov dword ptr [ebp-44h],eax
string b = "hello,word!";
0000004b mov eax,dword ptr ds:[02A62208h]
00000051 mov dword ptr [ebp-48h],eax
string c = "hello!";
00000054 mov eax,dword ptr ds:[02A756F8h]
0000005a mov dword ptr [ebp-4Ch],eax
a的地址指向02A62208h,b的地址也是02A62208h,這說明了什麼,創建b的時候.net機制肯定是先去查找內存中是否有這個字元串的內存地址,如果有則指向,沒有才創建
修改於2012.510
String(字元類型)
字元串數據類型,可包含單一字元或字元串的變數型態。需要注意的是在NoahWeb中要指定字元串給字元串變數,要在頭尾加上單引號 (例如: '中國')。
可以使用“ADD”運算符將多個字元進行連接運算。
表現層示例
示例輸出
NoahWeb
示例說明
輸出一個字元。
邏輯層示例
示例說明
設置一個變數名為actiondesc的局部變數的內容為字元"編輯內容"
表現層示例
示例輸出
NoahWeb1.1
示例說明
將兩個字元串相加后輸出。
邏輯層示例
示例說明
設置一個變數名為actiondesc的局部變數的內容為字元"編輯內容動作"
C++ 中的 string 類
相信使用過MFC編程的朋友對CString這個類的印象應該非常深刻吧?的確,MFC中的CString類使用起來真的非常的方便好用。但是如果離開了MFC框架,還有沒有這樣使用起來非常方便的類呢?答案是肯定的。也許有人會說,即使不用MFC框架,也可以想辦法使用MFC中的API,具體的操作方法在本文最後給出操作方法。其實,可能很多人很可能會忽略掉標準C++中string類的使用。標準C++中提供的string類得功能也是非常強大的,一般都能滿足我們開發項目時使用。現將具體用法的一部分羅列如下,只起一個拋磚引玉的作用吧,好了,廢話少說,直接進入正題吧!
包含
要想使用標準C++中string類,必須要包含
#include // 注意是,不是,帶.h的是C語言中的頭文件
using std::string;using std::wstring;
或
using namespace std;
下面你就可以使用string/wstring了,它們兩分別對應著char和wchar_t。
用法
string和wstring的用法是一樣的,以下只用string作介紹:
string類的構造函數:string(const char *s); //用c字元串s初始化string(int n,char c); //用n個字元c初始化
此外,string類還支持默認構造函數和複製構造函數,如string s1;string s2="hello";都是正確的寫法。當構造的string太長而無法表達時會拋出length_error異常;
string類的字元操作:
const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n);char &at(int n);
operator[]和at()均返回當前字元串中第n個字元的位置,但at函數提供範圍檢查,當越界時會拋出out_of_range異常,下標運算符[]不提供檢查訪問。
const char *data()const;//返回一個非null終止的c字元數組const char *c_str()const;//返回一個以null終止的c字元串
int copy(char *s, int n, int pos = 0) const;//把當前串中以pos開始的n個字元拷貝到以s為起始位置的字元數組中,返回實際拷貝的數目
完整特性
string的特性描述:
int capacity()const; //返回當前容量(即string中不必增加內存即可存放的元素個數)
int max_size()const; //返回string對象中可存放的最大字元串的長度
int size()const; //返回當前字元串的大小
int length()const; //返回當前字元串的長度
bool empty()const; //當前字元串是否為空
void resize(int len,char c);//把字元串當前大小置為len,並用字元c填充不足的部分
string類的輸入輸出操作:
string類重載運算符operator>>用於輸入,同樣重載運算符operator<<用於輸出操作。函數getline(istream &in,string &s);用於從輸入流in中讀取字元串到s中,以換行符'\n'分開。>
string的賦值:
string &operator=(const string &s);//把字元串s賦給當前字元串
string &assign(const char *s);//用c類型字元串s賦值
string &assign(const char *s,int n);//用c字元串s開始的n個字元賦值
string &assign(const string &s);//把字元串s賦給當前字元串
string &assign(int n,char c);//用n個字元c賦值給當前字元串
string &assign(const string &s,int start,int n);//把字元串s中從start開始的n個字元賦給當前字元
string的連接:
string &operator+=(const string &s);//把字元串s連接到當前字元串的結尾
string &append(const char *s); //把c類型字元串s連接到當前字元串結尾
string &append(const char *s,int n);//把c類型字元串s的前n個字元連接到當前字元串結尾
string &append(const string &s); //同operator+=()
string &append(const string &s,int pos,int n);//把字元串s中從pos開始的n個字元連接到當前字元串的結尾
string &append(int n,char c); //在當前字元串結尾添加n個字元c
string &append(const_iterator first,const_iterator last);//把迭代器first和last之間的部分連接到當前字元串的結尾
string的比較:
bool operator==(const string &s1,const string &s2)const;//比較兩個字元串是否相等運算符">","<",">=","<=","!="均被重載用於字元串的比較;
int compare(const string &s) const;//比較當前字元串和s的大小
int compare(int pos, int n,const string &s)const;//比較當前字元串從pos開始的n個字元組成的字元串與s的大小
int compare(int pos, int n,const string &s,int pos2,int n2)const;//比較當前字元串從pos開始的n個字元組成的字元串與s中//pos2開始的n2個字元組成的字元串的大小
int compare(const char *s) const;
int compare(int pos, int n,const char *s) const;
int compare(int pos, int n,const char *s, int pos2) const;//compare函數在>時返回1,<時返回-1,==時返回0
string的子串:
string substr(int pos = 0,int n = npos) const;//返回pos開始的n個字元組成的字元串
string的交換:
void swap(string &s2); //交換當前字元串與s2的值
string類的查找函數:
int find(char c, int pos = 0) const;//從pos開始查找字元c在當前字元串的位置
int find(const char *s,int pos = 0) const;//從pos開始查找字元串s在當前串中的位置
int find(const char *s, int pos, int n) const;//從pos開始查找字元串s中前n個字元在當前串中的位置
int find(const string &s,int pos = 0) const;//從pos開始查找字元串s在當前串中的位置//查找成功時返回所在位置,失敗返回string::npos的值
int rfind(char c, int pos = npos) const;//從pos開始從後向前查找字元c在當前串中的位置
int rfind(const char *s, int pos = npos) const;
int rfind(const char *s, int pos, int n = npos) const;
int rfind(const string &s,int pos = npos) const;//從pos開始從後向前查找字元串s中前n個字元組成的字元串在當前串中的位置,成功返回所在位置,失敗時返回string::npos的值
int find_first_of(char c, int pos = 0) const;//從pos開始查找字元c第一次出現的位置
int find_first_of(const char *s, int pos = 0) const;
int find_first_of(const char *s, int pos, int n) const;
int find_first_of(const string &s,int pos = 0) const;//從pos開始查找當前串中第一個在s的前n個字元組成的數組裡的字元的位置。查找失敗返回string::npos
int find_first_not_of(char c, int pos = 0) const;
int find_first_not_of(const char *s, int pos = 0) const;
int find_first_not_of(const char *s, int pos,int n) const;
int find_first_not_of(const string &s,int pos = 0) const;//從當前串中查找第一個不在串s中的字元出現的位置,失敗返回string::npos
int find_last_of(char c, int pos = npos) const;
int find_last_of(const char *s, int pos = npos) const;
int find_last_of(const char *s, int pos, int n = npos) const;
int find_last_of(const string &s,int pos = npos) const;
int find_last_not_of(char c, int pos = npos) const;
int find_last_not_of(const char *s, int pos = npos) const;
int find_last_not_of(const char *s, int pos, int n) const;
int find_last_not_of(const string &s,int pos = npos) const;//find_last_of和find_last_not_of與find_first_of和find_first_not_of相似,只不過是從後向前查找
string類的替換函數:
string &replace(int p0, int n0,const char *s);//刪除從p0開始的n0個字元,然後在p0處插入串s
string &replace(int p0, int n0,const char *s, int n);//刪除p0開始的n0個字元,然後在p0處插入字元串s的前n個字元
string &replace(int p0, int n0,const string &s);//刪除從p0開始的n0個字元,然後在p0處插入串s
string &replace(int p0, int n0,const string &s, int pos, int n);//刪除p0開始的n0個字元,然後在p0處插入串s中從pos開始的n個字元
string &replace(int p0, int n0,int n, char c);//刪除p0開始的n0個字元,然後在p0處插入n個字元c
string &replace(iterator first0, iterator last0,const char *s);//把[first0,last0)之間的部分替換為字元串s
string &replace(iterator first0, iterator last0,const char *s, int n);//把[first0,last0)之間的部分替換為s的前n個字元
string &replace(iterator first0, iterator last0,const string &s);//把[first0,last0)之間的部分替換為串s
string &replace(iterator first0, iterator last0,int n, char c);//把[first0,last0)之間的部分替換為n個字元c
string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);//把[first0,last0)之間的部分替換成[first,last)之間的字元串
string類的插入函數:
string &insert(int p0, const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);//前4個函數在p0位置插入字元串s中pos開始的前n個字元
string &insert(int p0, int n, char c);//此函數在p0處插入n個字元c
iterator insert(iterator it, char c);//在it處插入字元c,返回插入后迭代器的位置
void insert(iterator it, const_iterator first, const_iterator last);//在it處插入[first,last)之間的字元
void insert(iterator it, int n, char c);//在it處插入n個字元c
string類的刪除函數
iterator erase(iterator first, iterator last);//刪除[first,last)之間的所有字元,返回刪除后迭代器的位置
iterator erase(iterator it);//刪除it指向的字元,返回刪除后迭代器的位置
string &erase(int pos = 0, int n = npos);//刪除pos開始的n個字元,返回修改後的字元串
string類的迭代器處理:
string類提供了向前和向後遍歷的迭代器iterator,迭代器提供了訪問各個字元的語法,類似於指針操作,迭代器不檢查範圍。
用string::iterator或string::const_iterator聲明迭代器變數,const_iterator不允許改變迭代的內容。常用迭代器函數有:
const_iterator begin()const;iterator begin(); //返回string的起始位置
const_iterator end()const;iterator end(); //返回string的最後一個字元後面的位置
const_iterator rbegin()const;iterator rbegin(); //返回string的最後一個字元的位置
const_iterator rend()const;iterator rend(); //返回string第一個字元位置的前面
rbegin和rend用於從後向前的迭代訪問,通過設置迭代器string::reverse_iterator,string::const_reverse_iterator實現
字元串流處理:
通過定義ostringstream和istringstream變數實現,#include 頭文件中
例如:
string input("hello,this is a test");istringstream is(input);string s1,s2,s3,s4;is>>s1>>s2>>s3>>s4;//s1="hello,this",s2="is",s3="a",s4="test"ostringstream os;os<<<<<
以上就是對C++ string類的一個簡要介紹。用的好的話它所具有的功能不會比MFC中的CString類遜色多少,呵呵,個人意見!
MFC CString
最後要介紹如何在Win32 應用程序中引用MFC中的部分類,例如CString。
1.在工程目錄下右鍵選擇
"Properties”--->"Configuration Properties”--->“General”--->"Use of MFC"--->"Use MFC in a Static Library",
默認的是:"Use Standard Windows Libraries",如下圖:
2.在你所用的所有頭文件之前包含#include ,例如:可以在stdafx.h文件的最前面包含#include 頭文件,這樣在你的源代碼中就可以使用CString類了,不過這樣也有一個缺點,就是編譯出來的程序要比原來的大很多。我試過一個小程序,選擇"Use Standard Windows Libraries" 編譯出來的Release版本大概92kb,使用"Use MFC in a Static Library"編譯出來的Release版本大概192kb,足足大了100kb,這個就個人考慮了......
語系沿革備註
字元串是 Unicode 字元的有序集合,用於表示文本。String 對象是 System.Char 對象的有序集合,用於表示字元串。String 對象的值是該有序集合的內容,並且該值是不可變的。
String 對象稱為不可變的(只讀),因為一旦創建了該對象,就不能修改該對象的值。看來似乎修改了 String 對象的方法實際上是返回一個包含修改內容的新 String 對象。如果需要修改字元串對象的實際內容,請使用 System.Text.StringBuilder 類。
字元串中的每個 Unicode 字元都是由 Unicode 標量值定義的,Unicode 標量值也稱為 Unicode 碼位或者 Unicode 字元的序號(數字)值。每個碼位都是使用 UTF-16 編碼進行編碼的,編碼的每個元素的數值都用一個 Char 對象表示。
一個 Char 對象通常表示一個碼位,即:Char 的數值等於該碼位。但是,一個碼位可能需要多個編碼元素。例如,Unicode 輔助碼位(代理項對)使用兩個 Char 對象來編碼。
索引是 Char 對象在 String 中的位置,而不是 Unicode 字元的位置。索引是從零開始、從字元串的起始位置(其索引為零)計起的非負數字。連續的索引值可能並不與連續的 Unicode 字元相對應,這是因為一個 Unicode 字元可能會編碼為多個 Char 對象。若要使用每個 Unicode 字元而不是每個 Char 對象,請使用 System.Globalization.StringInfo 類。
序號運算
String 類的成員對 String 對象執行序號運算或語義運算。序號運算是對每個 Char 對象的數值執行的。語義運算則對考慮了特定於區域性的大小寫、排序、格式化和語法分析規則的 String 的值執行。語義運算在顯式聲明的區域性或者隱式當前區域性的上下文中執行。有關當前區域性的更多信息,請參見 CultureInfo.CurrentCulture 主題。
大小寫規則決定如何更改 Unicode 字元的大小寫,例如,從小寫變為大寫。
格式化規則決定如何將值轉換為它的字元串表示形式,而語法分析規則則確定如何將字元串表示形式轉換為值。
排序規則確定 Unicode 字元的字母順序,以及兩個字元串如何互相比較。例如,Compare 方法執行語義比較,而 CompareOrdinal 方法執行序號比較。因此,如果當前的區域性為美國英語,則 Compare 方法認為“a”小於“A”,而 CompareOrdinal 方法會認為“a”大於“A”。
.NET Framework 支持單詞、字元串和序號排序規則。單詞排序會執行區分區域性的字元串比較,在這種比較中,某些非字母數字 Unicode 字元可能會具有特殊的權重。例如,連字元(“-”)的權重非常小,因此“coop”和“co-op”在排序列表中是緊挨著出現的。字元串排序與單詞排序相似,只是所有非字母數字元號均排在所有字母數字 Unicode 字元前面,沒有特例。
區分運算
區分區域性的比較是顯式或隱式使用 CultureInfo 對象的任何比較,包括由 CultureInfo.InvariantCulture 屬性指定的固定區域性。當前隱式區域性由 Thread.CurrentCulture 屬性指定。
序號排序基於字元串中每個 Char 對象的數值對字元串進行比較。序號比較自動區分大小寫,因為字元的小寫和大寫版本有著不同的碼位。但是,如果大小寫在應用程序中並不重要,則可以指定忽略大小寫的序號比較。這相當於使用固定區域性將字元串轉換為大寫,然後對結果執行序號比較。
有關單詞、字元串和序號排序規則的更多信息,請參見 System.Globalization.CompareOptions 主題。
區分區域性的比較通常適用於排序,而序號比較則不適合。序號比較通常適用於確定兩個字元串是否相等(即,確定標識),而區分區域性的比較則不適用。
比較和搜索方法的“備註”指定方法是區分大小寫、區分區域性還是兩者區分。根據定義,任何字元串(包括空字元串 (""))的比較結果都大於空引用;兩個空引用的比較結果為相等。
規範化
某些 Unicode 字元具有多個等效的二進位表示形式,這些表示形式中包含幾組組合的和/或複合的 Unicode 字元。Unicode 標準定義了一個稱為規範化的過程,此過程將一個字元的任何一種等價二進位表示形式轉換為統一的二進位表示形式。可使用多種遵循不同規則的演演算法執行規範化,這些演演算法也稱為範式。.NET Framework 當前支持範式 C、D、KC 和 KD。通常用序號比較來評估一對規範化的字元串。
安全注意事項
如果應用程序進行有關符號標識符(如文件名或命名管道)或持久數據(如 XML 文件中基於文本的數據)的安全決策,則該操作應該使用序號比較而不是區分區域性的比較。這是因為根據起作用的區域性的不同,區分區域性的比較可產生不同的結果,而序號比較則僅依賴於所比較字元的二進位值。
功能
String 類提供的成員執行以下操作:比較 String 對象;返回 String 對象內字元或字元串的索引;複製 String 對象的值;分隔字元串或組合字元串;修改字元串的值;將數字、日期和時間或枚舉值的格式設置為字元串;對字元串進行規範化。
使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith 和 StartsWith 方法進行比較。
使用 IndexOf、IndexOfAny、LastIndexOf 和 LastIndexOfAny 方法可獲取字元串中子字元串或 Unicode 字元的索引。
使用 Copy 和 CopyTo 可將字元串或子字元串複製到另一個字元串或 Char 類型的數組。
使用 Substring 和 Split 方法可通過原始字元串的組成部分創建一個或多個新字元串;使用 Concat 和 Join 方法可通過一個或多個子字元串創建新字元串。
使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd 和 TrimStart 可修改字元串的全部或部分。
使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改字元串中 Unicode 字元的大小寫。
使用 Length 屬性可獲取字元串中 Char 對象的數量;使用 Chars 屬性可訪問字元串中實際的 Char 對象。
使用 IsNormalized 方法可測試某個字元串是否已規範化為特定的範式。使用 Normalize 方法可創建規範化為特定範式的字元串。
獲取字元
string 類型通過下標操作符([ ])來訪問 string 對象中的單個字元。下標操作符需要取一個 size_type 類型的值,來標明要訪問字元的位置。這個下標中的值通常被稱為“下標”或“索引”(index)
.
可用下標操作符分別取出 string 對象的每個字元,分行輸出:
string str("some string");for (string::size_type ix = 0; ix != str.size(); ++ix)cout << str[ix] << endl;
每次通過循環,就從 str 對象中讀取下一個字元,輸出該字元並換行
。
實現的介面
String 類分別用於實現 IComparable、ICloneable、IConvertible、IEnumerable 和 IComparable 介面。使用 Convert 類進行轉換,而不是使用此類型的 IConvertible 顯式介面成員實現。
繼承層次結構
System.Object
System.String
線程安全
此類型是線程安全的。
平台Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
Windows Vista、Microsoft Windows XP SP2 和 Windows Server 2003 SP1 支持 Microsoft .NET Framework 3.0。
版本信息
.NET Framework
受以下版本支持:3.0、2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0
XNA Framework
受以下版本支持:1.0
英語單詞
string n.(樂器的)弦,細繩