我們古人沒有電影電視,沒有游戲網(wǎng)絡(luò),,所以文人們就會想出一些文字游戲來娛樂,。比如宋代的李禺寫了這樣一首詩:“枯眼望遙山隔水,往來曾見幾心知,?壺空怕酌一杯酒,,筆下難成和韻詩。途路阻人離別久,,訊音無雁寄回遲,。孤燈守夜長寥寂,夫憶妻兮父憶兒。”顯然這是老公想念老婆和兒子的詩句,。曾經(jīng)和妻兒在一起,,享受天倫之樂,現(xiàn)在一個人長久沒有回家,,也不見書信返回,,望著油燈想念親人,能不傷感嗎,? 可仔細(xì)一讀發(fā)現(xiàn),,這首詩竟然可以倒過來讀:“兒憶父兮妻憶夫,寂寥長夜守?zé)艄?。遲回寄雁無音訊,,久別離人阻路途。詩韻和成難下筆,,酒杯一酌怕空壺,。知心幾見曾來往,水隔山遙望眼枯,。”這表達(dá)了妻子對丈夫的思念,。老公離開好久,路途遙遠(yuǎn),,難以相見,。寫信不知道寫什么,獨自喝酒也沒什么興致,。只能和兒子夜夜守在家里一盞孤燈下,苦等老公的歸來,。 這種詩叫做回文詩,。它是一種可以倒讀或反復(fù)回旋閱讀的詩體。剛才這首就是正讀是丈夫思念妻子,,倒讀是妻子思念丈夫的古詩,。是不是感覺很奇妙呢? 在英文單詞中,,同樣有神奇的地方,。“即使是lover也有個over,,即使是friend也有個end,,即使是believe也有個lie?!蹦銜l(fā)現(xiàn),,本來不相干,甚至對立的兩個詞,卻有某種神奇的聯(lián)系,。這可能是創(chuàng)造這幾個單詞的智者們也沒有想到的問題,。 今天我們就要來談?wù)勥@些單詞或句子組成字符串的相關(guān)問題。 1 串的定義與操作 1.1 串的相關(guān)定義 串(string)是由零個或多個字符組成的有限序列,,又名字符串,,記為S=”a0a1……an-1”。 串中包含字符的個數(shù)稱為串的長度,。 長度為零的串稱為空串(null string),。直接用雙引號””表示,在C#中也可用string.Empty來表示,。 還有一些概念需要解釋: 空白串:由一個或多個空格組成的串,。 子串與主串:串中任意連續(xù)字符組成的子序列,稱為該串的子串,。相應(yīng)的包含子串的串稱為主串,,即子串是主串的一部分。 子串在主串中的位置:子串在主串中第一次出現(xiàn)時,,子串第一個字符在主串中的序號,。 例如: A=“this is a string”; B=“is”; B在A中的位置為2。 串相等:長度相等且對應(yīng)位字符相同,。 1.2 串的操作 串的邏輯結(jié)構(gòu)和線性表很相似,,不同之處在于串針對的是字符集,也就是串中的元素都是字符,。因此,,對于串的基本操作與線性表是有很大差別的。線性表更關(guān)注的是單個元素的操作,,比如查找一個元素,,插入或刪除一個元素,但串中更多的是關(guān)注它子串的應(yīng)用問題,,如查找子串位置,,得到指定位置子串、替換子串等操作,。 關(guān)于串的基本操作如下: (1)獲取串的長度 (2)獲取或設(shè)置指定索引處的字符 (3)在指定位置插入子串 (4)在指定位置移除給定長度的子串 (5)在指定位置取子串 (6)當(dāng)前串的拷貝 (7)串連接 (8)串的匹配 (9)串替換 (10)移除串兩邊的空格 (11)串填充 比如C#中,,字符串操作就還有ToLower轉(zhuǎn)小寫、ToUpper轉(zhuǎn)大寫,、IndexOf從左查找子串位置,、LastIndexOf從右查找子串位置、Trim去除兩邊空格等比較方便的操作,,它們其實就是前面這些基本操作的擴(kuò)展函數(shù),。 圖1 串接口 代碼見:LinearStruct.IString.cs 2 串的存儲與實現(xiàn) 串的存儲結(jié)構(gòu)與線性表相同,,分為兩種: 順序存儲:char類型的數(shù)組。由于數(shù)組是定長的,,就存在一個預(yù)定義的最大串長度,,它規(guī)定在串值后面加一個不計入串長度的結(jié)束符,比如’\0’來表示串值的終結(jié),。 鏈?zhǔn)酱鎯Γ?/span>SlinkList<char> (浪費存儲空間) 圖2 順序串類圖 代碼見:LinearStruct.SeqString.cs 3 舉例: using System; using LinearStruct; namespace ConsoleApplicationString { classProgram { privatestatic voidMain(string[] args) { string S = "teacherand student all like tea."; IString str = new SeqString(S); Console.WriteLine("原字符串:{0}", str); IString str2 = str; IString str3 = str.Clone(); str2[0] = 'm'; Console.WriteLine("沒調(diào)用Clone方法:{0}", str); Console.WriteLine("調(diào)用Clone方法:{0}", str3); Console.WriteLine("----------"); str = new SeqString(S); IString str4 = newSeqString("mother"); Console.WriteLine(str.Insert(0, str4)); Console.WriteLine(str.Insert(3, str4)); Console.WriteLine(str.Remove(3, 2)); Console.WriteLine(str.Remove(3, 10)); Console.WriteLine("----------"); Console.WriteLine(str.Concat(str4)); Console.WriteLine((SeqString)str4 + (SeqString) str); Console.WriteLine("----------"); Console.WriteLine(str.SubString(3, 0)); Console.WriteLine(str.SubString(3, 4)); Console.WriteLine(str.SubString(3, 10)); Console.WriteLine("----------"); IString parS1 = newSeqString("ea"); IString parS2 = newSeqString("hk"); Console.WriteLine(str.IndexOf(parS1)); Console.WriteLine(str.IndexOf(parS1, 8)); Console.WriteLine(str.IndexOf(parS2)); Console.WriteLine("----------"); Console.WriteLine(str.PadLeft(40, '@')); Console.WriteLine("----------"); Console.WriteLine(str.Replace(new SeqString("ea"), newSeqString("EA"))); Console.WriteLine("----------"); Console.WriteLine(str.Concat(str4).Length); Console.WriteLine(str.Concat(str4).Trim().Length); } } } 通過微信學(xué)習(xí)的知識只能是碎片化的知識,,作為新時代的我們希望能夠構(gòu)建自己的知識結(jié)構(gòu),使我們的知識體系化,,系統(tǒng)化,,以后在遇到碎片化的知識,我們做的只是融合到自己的知識結(jié)構(gòu)中,,故我們將推出“與LSGO一起學(xué)”系列課程,,幫助大家來構(gòu)建知識框架,初步規(guī)劃有:
如果對這些內(nèi)容感興趣,可以一起來學(xué)習(xí)討論,。 我們的官網(wǎng): www.lsgogroup.com
|
|