在應用程式中使用最頻繁的型別是字串。字串簡稱串,是一種特殊的線 性表,其特殊性在於串中的資料元素是乙個個的字元。字串在計算機的許多方面應用很廣。如在彙編和高階語言的編譯程式中,源程式和目標程式都是字串 資料。在事務處理程式中,顧客的資訊如姓名、位址等及貨物的名稱、產地和規 格等,都被作為字串來處理。另外,字串還具有自身的一些特性。因此,把字串作為一種資料結構來研究。
串(string)由n(n ≥0)字元組成的有限序列。一般記為:s=」c1c2 …cn 」(n≥0) 其中,s是串名,雙引號作為串的定界符,用雙引號引起來的字串行是串 值。ci(1≤i≤n )可以是字母、數字或其它字元,n為串的長度,當n=0時,稱為空串(empty string)。 串中任意個連續的字元組成的子串行稱為該串的子串(substring)。包含子串的串相應地稱為主串。子串的第乙個字元在主串中的位置叫子串的位置。
由於串中的字元都是連續儲存的,而在c#中串具有恆定不變的特性,即字 符串一經建立,就不能將其變長、變短或者改變其中任何的字元。所以,這裡不 討論串的鏈式儲存,也不用介面來表示串的操作。
1、求串長求串的長度就是求串中字元的個數,可以通過求陣列 data的長度來求串的長度。求串的長度的實現如下:
public
int getlength()
2、串比較如果兩個串的長度相等並且對應位置的字元相同,則串相等,返回 0;如果串s對應位置的字元大於該串的字元或者如果串s的長度大於該串,而在該串的 長度返回內二者對應位置的字元相同,則返回-1,該串小於串s;其餘情況返回 1,該串大於串s。 串比較的演算法實現如下:
public
int compare(stringds s)
} if (i <= len)
else
if (this[i] > s[i])
} else
if(this.getlength() s.getlength())
else
if (this.getlength() < s.getlength())
return 1;
}
3、求子串從主串的index位置起找長度為len的子串,若找到,返回該子串,否則,返回乙個空串。 演算法實現如下:
public stringds substring(int index, int len)
stringds s = new stringds(len);
for (int i = 0; i < len; ++i)
return s;
}
4、串連線將乙個串和另外乙個串連線成乙個串,其結果返回乙個新串,新串的長度是兩個串的長度之和,新串的前部分是原串,長度為該串的長度,新串的後部分是串s,長度為串s的長度。 串連線的演算法實現如下:
public stringds concat(stringds s)
for(int j = 0; j < s.getlength(); ++j)
return s1;
}
5、串插入串插入是在乙個串的位置index處插入乙個串s。如果位置符合條件,則該操作返回乙個新串,新串的長度是該串的長度與串s的長度之和,新串的第1部分是 該串的開始字元到第index之間的字元,第2部分是串s,第3部分是該串從index 位置字元到該串的結束位置處的字元。如果位置不符合條件,則返回乙個空串。 串插入的演算法如下:
public stringds insert(int index, stringds s)
for (int i = 0; i < index; ++i)
for(int i = index; i < index + len ; ++i)
for (int i = index + len; i < len2; ++i)
return s1;
}
6、串刪除串刪除是從把串的第index位置起連續的len個字元的子串從主串中刪除掉。 如果位置和長度符合條件,則該操作返回乙個新串,新串的長度是原串的長度減 去len,新串的前部分是原串的開始到第index個位置之間的字元,後部分是原串 從第index+len位置到原串結束的字元。如果位置和長度不符合條件,則返回一 個空串。 串刪除的演算法實現如下:
public stringds delete(int index, int len)
stringds s = new stringds(this.getlength() - len);
for (int i = 0; i < index; ++i)
for (int i = index + len; i < this.getlength(); ++i)
return s;
}
7、串定位查詢子串s在主串中首次出現的位置。如果找到,返回子串s在主串中首次出現的位置,否則,返回-1。 串定位的演算法實現如下:
public
int index(stringds s)
int i = 0;
int len = this.getlength() - s.getlength();
while (i < len)
} if (i <= len)
return -1;
}
、ienumerable
、ienumerable 和iequatable
等介面。string 的恆定性指的是乙個串一旦被建立,就不能將其變長、變短或者改變其中任何的字元。所以,當我們對乙個串進行操作時,不能改變字串,c#也 提供了
stringbuilder
型別來支援高效地動態建立字串。
在c#中,建立串不能用new 操作符,而是使用一種稱為字串駐留的機制。這是因為 c#語言將 string 看作是基元型別。基元型別是被編譯器直接支援的型別,可以在源**中用文字常量(literal)來直接表達字串。當c#編譯器對源**進行編譯時,將文字常量字串存放在託管模組的元資料中。而當 clr 初始 化時,clr建立乙個空的雜湊表,其中的鍵是字串,值為指向託管堆中字元 串物件的引用。雜湊表就是雜湊表。當 jit 編譯器編譯方法時,它會在雜湊表中查詢每乙個文字常量字串。如果找不到,就會在託管堆中構造乙個新的 string 物件(指向字串),然後將該字串和指 向該字串物件的引用新增到雜湊表中;如果找到了,不會執行任何操作。
資料結構筆記6 串
在應用程式中使用最頻繁的型別是字串。字串簡稱串,是一種特殊的線 性表,其特殊性在於串中的資料元素是乙個個的字元。字串在計算機的許多方面應用很廣。如在彙編和高階語言的編譯程式中,源程式和目標程式都是字串 資料。在事務處理程式中,顧客的資訊如姓名 位址等及貨物的名稱 產地和規 格等,都被作為字串來處理。...
資料結構筆記6 串
在應用程式中使用最頻繁的型別是字串。字串簡稱串,是一種特殊的線 性表,其特殊性在於串中的資料元素是乙個個的字元。字串在計算機的許多方面應用很廣。如在彙編和高階語言的編譯程式中,源程式和目標程式都是字串 資料。在事務處理程式中,顧客的資訊如姓名 位址等及貨物的名稱 產地和規 格等,都被作為字串來處理。...
資料結構6 串
串是一種特殊的線性表,串中每個資料元素都是乙個單字元,對串進行操作時,經常將若干字元作為乙個整體進行處理。s是串名,引號不屬於串的內容。串賦值strassign sqstring s1,sqstring s2 求串長strlength sqstring s 串比較strcompare sqstrin...