夢醒瀟湘love
1、串的相關概念
1)串(string)是由零個或多個字元組成的有限序列,又名叫字串。
2)串中含有的字元資料稱為串的長度,零個字元的串稱為空串(null string),它的長度為零。
3)子串與主串,串中任意個數的連續字元組成的子串行稱為該串的子串,相應地,包含子串的串稱為主串。
4)子串在主串中的位置就是子串的第乙個字元在主串中的序號。
2、串的儲存結構
串的儲存結構與線性表相同,分為兩種。
2.1 串的順序儲存結構
串的順序儲存結構是用一組位址連續的儲存單元來儲存串中的字串行的。按照預定義的大小,為每個
定義的串變數分配乙個固定長度的儲存區。一般是用定長陣列來定義。
規定在串值後面加乙個不計入串長度的結束標記字元,比如「\0」來表示串值終結。
串的順序儲存方式其實可能會有問題,因為字串的操作,比如兩船的連線concat、新串的插入等操
作,都有可能使得串串行的長度超過了陣列長度maxsize。於是對於串的順序儲存,有一些變化,串值的存
儲空間可在程式執行過程中動態分配而得。比如在計算機中存在乙個自由儲存區,叫做堆。這個堆可由c語
言的動態分配函式malloc()和free()來管理。
2.2 串的鏈式儲存結構
串的鏈式儲存結構除了在連線串與串操作時有一定方便外,總的來說不如順序儲存靈活,效能也不如順
序儲存結構好。
3. 串的相關操作——《c標準庫》/*
*注意:
* 檢查指標有效性
* strncpy和memcpy的區別,
'\0'的判斷
* 記憶體區重疊問題
* 進行鏈式操作等*/
char *s_strcpy(char *dest,
const char *src)
//*dest =
'\0'
;return tmp;
}char *s_strncpy(char *dest,
const char *src, size_t n)
*dest =
'\0';/
/n小於src字串的長度
return tmp;}/
/與strncpy最大的區別是: memcpy不會遇到'
\0'結束拷貝
void *s_memcpy(void *destaddr,
const void *srcaddr, size_t n)
return destaddr;}/
/memmove很好的解決了memcpy不能解決的資料區重疊的問題
void *memmove(void *dest,
const void *src, size_t n)
}else
}return tmp;
}void *s_memset(void *s,
int c, size_t n)
return s;
}size_t s_strlen(
const char *str)
return len;/
*if(str =
=null||
*str =='
\0')
else*/
}char *s_strcat(char *dest,
const char *src)
while((
*dest =
*src)!=
'\0'
)*dest =
'\0'
;return tmp;
}int s_strcmp(
const char *str1,
const char *str2)
return (
*tmp_str1 -
*tmp_str2);}
int s_strncmp(
const char *str1,
const char *str2, size_t n)
return (
*tmp_str1 -
*tmp_str2);}
char * s_strchr(
const char *str,
const char c)
}return tmp;}
資料結構之 字串
一 簡介 字串或者說串 string 是由數字 字母。下劃線組成的一串字元。一般可以記為s a0a1a2a3.an n 0並且n是有限非負整數 從資料結構上來看,用c 來說,字串是一種特殊的線性表,也就是裡面的每個元素都是字元的一種線性表。可以是用陣列實現,或者鍊錶實現。具體的優缺點可以參照陣列和鍊...
資料結構演算法之字串
字串是由若干個字元組成,在c c 中常常使用 0 字元作為結尾,這樣很方便的為我們查詢到字串的最後乙個字元。為了節省空間,c c 常常將字串單獨放到乙個記憶體空間中,當幾個指標賦予相同的變數時,實際上他們會指向相同的位址空間 實現乙個函式將字串中的空格替換成 20 實現方式 方式一 如果是建立新的字...
資料結構之動態字串
型別別名,用於指向 sdshdr 的 buf 屬性 typedef char sds 儲存字串物件的結構 struct sdshdr 動態字串是redis的基礎資料結構之一,這裡並沒有簡單地只用c中常用的char 型別來儲存字串,而是建立了乙個sdshdr的結構體,該結構體包含三個組成元素,欄位le...