概述:
字串是由零個或多個字元組成的有限序列。
子串:串中任意個連續的字元組成的子串行。
字串是最常見和常考的一種型別,有很多演化的問題,例如最長公共子串行等,這裡就不介紹了,只了解一下相關的基本知識和標準庫的一些函式。
包含兩種:
1)字串常量:以雙引號括起來的字串行是字串常量。為了相容c語言,c++所有的字串常量都由編譯器自動在末尾新增乙個空字元。
例:字元常量'a'表示單個字元a,然後"a"是字串常量,其表示字母a和空字元(null)兩個字元。
2)末尾新增了'\0'的字元陣列。
c++語言通常用char*/const char*型別的指標來操縱c語言中的字串,一般來說,我們使用指標的算術操作來遍歷c風格字串,直到到達結束符null為止。
constchar *cp = "
hello world";
while(*cp)
注:最後的'\0'會轉化為十進位制的0,因此可以用while(*cp)來判斷。
舉個小例子,可以以此來求得字串的長度:
int len(char *x)
c/c++提供了眾多的字串處理函式,下表介紹了主要的一些函式:
strlen(s)
返回s的長度,不包括字串結束符null
strcmp(s1, s2)
比較兩個字串s1和s2是否相同。若相等,返回0;若s1大於s2,返回正數;否則返回負數。
strcat(s1, s2)
將字串s2連線到s1後,返回s1
strcpy(s1, s2)
將s2複製給s1,並返回s1
strncat(s1,s2,n)
將s2的前n個字元連線到s1後面,並返回s1
strncpy(s1,s2,n)
將s2的前n個字元複製給s1,並返回s1
再弄清楚兩個容易混淆的函式:
1)memcpy
void *memcpy(void *dest, constvoid *src, size_t n);
2)memset
void *memset(void *s, int ch, size_t n);
功能:將s中前n個位元組用ch替換並返回s,作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作最快的一種方法。
下面寫乙個知識點:
strcpy和memcpy的區別:
1.複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。
2.複製的方法不同。strcpy不需要指定長度,遇到被複製字串的結束符'\0'才結束,所以容易溢位。memcpy則根據第三個引數來決定複製的長度。
3.用途不同。通常在複製字串的時候用strcpy,其他型別的時候用memcpy。
字串的基本知識就複習到這裡了,字串的實際應用時最廣泛的,這就要好好的研究演算法了,希望大家能記住這部分的知識~。~
返回目錄 -> c/c++基礎知識概述
Java基礎(2 字串)
public char charat int index 返回字串中第index個字元 public int length 返回字串的長度 public int indexof string str 返回字串中出現 str 的第乙個位置 public int indexof string str i...
2 字串查詢
kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next 函式,函式本身包含了模式串的區域性匹配資訊。時間複雜度o m n 通過getnext 實現部分匹配值,然後利用kmp演算法計算是否匹配。如下 package li...
2 字串插入
描述 有兩個字串str和substr,str的字元個數不超過10,substr的字元個數為3。字元個數不包括字串結尾處的 0 將substr插入到str中ascii碼最大的那個字元後面,若有多個最大則只考慮第乙個。輸入 輸入包括若干行,每一行為一組測試資料,格式為 str substr 輸出 對於每...