c++的字串是乙個很難理解,很瑣碎的乙個點。
它上承c時代的餘燼,又在c++時代有所革新。
由於其設計過程歷經了兩個時代,所以,誕生了一堆令人窒息的操作。
首先,我們來看一看,c在一開始只有一種,那就是char字元。
這個字元儲存的是什麼呢?是數字,也就是 char a = 'a';其實裡面存著的是15。
那為什麼cin>>a輸出的是a呢?這是因為cin提供了關於a的處理方法,所以,這個字元15才被從字元表中進行搜尋,然後,輸出相應的字元。
在以前字元表比較小的情況下,出現了更高階的需求,那就是中文的表達。
中文多少個,這是ascall碼表達不了的,而char的設定是8位,這是絕對存不下中文的。
所以,首先是編碼表的擴充套件,擴充套件了才能存上幾萬中文,char型就擴充套件成了wchar,甚至還有其他的char-16等。這些char的擴充套件都比char型長。(具體細節,我建議等到用到的時候再去了解)
既然char字元已經有了,它可以表示乙個字元。
但我需要的是乙個可以表示數個字元的機制。
那其首選,當然是陣列了。
char a = ; 這就是乙個典型的陣列。其中後面花括號裡的,就是一種初始化的方法,在這個過程中,c++編譯器會自動的計算這個陣列有多大,然後分配一定的空間。
當然也可以手工分配記憶體空間。比如 char a[3] = ;但注意了,這樣生成的東西,是乙個字串陣列,但卻不是乙個字串。
字串的最後一位是char a[3] = ;這也就是說,最後一位必須是乙個空字元。這樣的東西,才能被稱為字串。
為什麼要這樣呢?是因為c++設計的很多函式,過載的《符號啊,都是通過定位『0』作為最後的乙個判別符號的,如果沒有這個『0』,c++很多特性就沒辦法用了。
初始化乙個字串,乙個是不指定記憶體數目,靠編譯器推斷,乙個是自己指定好了。兩種都是花括號。
還有一種是直接用 = 號進行指定,典型例子就是 char a[3] = "tx", 注意這裡的引號是雙引號,而不是單引號。這是特殊的指定方式,當然也可以讓編譯器自己推斷。
現在,字串已經初始化好了,接下來是對字串進行操作。
最典型的三個重要操作。
乙個是字串的拷貝,即把乙個字串拷貝到另乙個字串中。
乙個是字串的拼接,即把兩個陣列拼起來。
乙個是strcpy(str1,str2);
乙個是strcat(str1,str2);
乙個是strlen()獲得乙個字串中字元的數量,但是不會計算最後的『0'符號。
字串很重要的乙個問題,是字串的讀入。
那字串怎麼讀入呢。
最典型的是 cin >>a ;這種讀入方式,在遇到空格,製表符,換行符的時候,就會發生乙個自動的停止。往往讀入的,就是乙個普通的單詞。
那這個時候就要想辦法,讓一行有空格的長句子能讀入記憶體。
cin這個物件,提供了一系列的讀入方法,最典型的,就是getline()和get();
對於getline()來說,它是讀到換行符,才進行換行的。當然,最後乙個換行符,getline()會刪掉,用'0』來替代。
對於get()來說呢,它是讀到換行符的時候,就會停下來。cin.get(str,strarraysize);但是,因為cin.get()是可過載的設計,所以,cin.get()當括號中一無所有的情況下,就可以把換行符讀進去,然後再接cin.get(str,strarryaysize),繼續讀下去。
為什麼會有get()和getline()兩個設計呢,是因為get()出現的比較早,同時get()的設計因為不會讀換行符,所以可以通過cin.get()判斷,是不是讀的字元已經把為字串開的空間佔滿了讀不下去,還是真的把字元讀完了,這有利於調參。
很顯然,用陣列表示字串,那是沒辦法動態擴充套件記憶體空間的。
於是人們就提出了乙個工具,叫string類。
string類,第乙個問題是資料的讀取。
string a = "hah";或者 string a =;,兩種賦值方式都是可以的。
同時,string的賦值,拼接都是特別先進的。比如,等於號拷貝,加號拼接。
string類的讀入是乙個值得注意的點。
我們都知道,可以用cin>>str;來輸入乙個string。但是同樣,遇到空白符製表符,cin就涼了。
所以,使用getline(),就可以一行一行的讀入。
但這個getline(),它的形式並不是cin.getlien().它的形式是getline(cin,str);
最關鍵的戲肉來了。
有時候,那就是,有的時候一些古老的庫,依賴於c風格字元換,需要進行一下轉化。
對於從陣列轉化為str,那就是利用string的建構函式
這個留待下一次再談,實在是太睏了。
C 字串換行 字串畫素高度 寬度 的結構
字串高度 寬,行數,及字串本身 public struct hhstring if sf.width width tempwidth g.measurestring str i tostring font width 1 str tempstr sf g.measurestring str,font...
c 拼接字串陣列 C 字串拼接
測試環境 unity2018.4 net4.x。需要注意.net4.x和3.5差異還是挺大的 寫的內容大部分網上已有,算是總結他人的成果,是 1 先說幾條結論 1 1 字串在c 中是高頻出現的 1 2 這類高頻出現方法 字段通常不是每幀的效能瓶頸。但有可能是瞬間卡頓的 1 3 字串記憶體開銷計算 2...
c 拼接字串陣列 陣列 字串拼接
題目描述輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。public class solution 交換的值不是拼接後的兩個相鄰字串 if before after for int i 0 i...