一.串的定義
串是由零個或者多個字元組成的有限序列。串中任意連續的字元組成的子串行稱為該串的字串,包含字串的串稱為主串。
在c語言中,串可以使用如下語句定義:
char str = "hello world!";
上面的串裡面一共有12個字元,但是編譯器以 『\0』 作為字串結束標誌,所以陣列str的長度為13,串str的長度為12。
二.串的儲存結構
定長順序表示:
串的定長順序表示指的是採用乙個固定長度的陣列來儲存串,但是並不像上面那樣直接定義,而是額外定義乙個變數儲存所儲存陣列中串的長度。
typedef struct
str;
變長分配儲存表示變長分配儲存表示(又叫動態分配儲存表示)是指定義乙個指向儲存區的首位址的指標,根據需要不斷申請記憶體來儲存串。
typedef structstr;
三.串的基本操作賦值操作
int strassign(str *s, char *ch)
if(len == 0)
else //將字串賦值
s->length = len;
return ok;
} }}
串比較操作
int strcompare(str s1, str s2)
if(s1.length > s2.length)
return 1;
else if(s1.length < s2.length)
return 2;
else
return 0;
}
串連線操作
int strconcat(str *s, str s1, str s2)
s->ch = (char *)malloc((s1.length+s2.length+1)*sizeof(char));
if(s->ch == null)
return error;
while(ich[i] = s1.ch[i];
++i;
} while(jch[i+j] = s2.ch[j];
++j;
} s->length = s1.length + s2.length;
return ok;
}
演示**及結果
int main(int argc, char *ar**) ,s2 = ,s = ;
//這裡必須兩個都要初始化
strassign(&s1,"hello ");
printf("字串1為:");
printf(s1.ch);
printf("\t長:%d \n",s1.length);
strassign(&s2,"world!");
printf("字串2為:");
printf(s2.ch);
printf("\t長:%d \n",s2.length);
printf("兩個字串比較結果:%d\n",strcompare(s1, s2));
strconcat(&s, s1, s2);
printf("兩個字串貼上後為:");
printf(s.ch);
printf("\t長:%d \n",s.length);
結果正確!
——————————————————————————————————
這次遇到乙個問題,在主函式中如果定義結構體三個s不初始化,只有第乙個可以使用,後續的無效,所以必須將三個都初始化。
結構體初始化,都初始化就都有記憶體空間位址都可以都引用,預設初始化,第乙個系統預設給個記憶體空間,第二個系統還會給嗎
資料結構 C語言實現串
include stdlib.h include stdio.h define true 1 define false 0 define maxlen 255 typedef int status typedef structstring 串的賦值 void strassign string s,c...
資料結構 佇列(C語言實現)
佇列 c語言實現 include include define queueisempty arg arg size 0 define queueisfull arg arg size arg capacity 判斷是否為空或為滿。巨集定義,函式調銷太大。佇列使用size和capacity顯式的判斷是...
資料結構C語言實現 ADT Triplet
declartion.h 型別宣告 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 define elemtype int typedef elemtype t...