C/C++ 字串處理函式
阿新 • • 發佈:2019-01-26
C語言中的字串處理函式:
1. 字串長度
extern int strlen(char *s); //返回s的長度,不包括結束符NULL。該函式以結束符為判斷字串長度結束的標誌。
註釋:
沒有memsize函式或是memlen函式嗎?
2. 字串比較
extern int strcmp(char *s1,char * s2);
extern int strncmp(char *s1,char * s2,int n);// 比較字串s1和s2的前n個字元。
extern int stricmp(char *s1,char * s2);//比較字串s1和s2,但不區分字母的大小寫。
extern int strnicmp(char *s1,char * s2,int n);//比較字串s1和s2的前n個字元但不區分大小寫。
extern int bcmp(const void *s1, const void *s2, int n);//比較字串s1和s2的前n個位元組是否相等,如果s1=s2或n=0則返回零,否則返回非零值。bcmp不檢查NULL。
說明:當s1<s2時,返回值<0;當s1=s2時,返回值=0;當s1>s2時,返回值>0
3. 記憶體位元組比較
extern int memcmp(void *buf1, void *buf2, unsigned int count);
extern int memicmp(void *buf1, void *buf2, unsigned int count);//比較時不區分字母的大小寫。
說明:比較記憶體區域buf1和buf2的前count個位元組。
當buf1<buf2時,返回值<0
當buf1=buf2時,返回值=0
當buf1>buf2時,返回值>0
4.附加
extern char *strcat(char *dest,char *src);//把src所指字串新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
extern char *strncat(char *dest,char *src,int n);//把src所指字串的前n個字元新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。
5.(字串)複製
extern char *strcpy(char *dest,char *src);//把src所指由NULL結束的字串複製到dest所指的陣列中。
extern char *stpcpy(char *dest,char *src);//同上
extern char *strncpy(char *dest, char *src, int n);//把src所指由NULL結束的字串的前n個位元組複製到dest所指的陣列中。
extern void bcopy(const void *src, void *dest, int n);//將字串src的前n個位元組複製到dest中,bcopy不檢查字串中的空位元組NULL,函式沒有返回值。
extern char *strdup(char *s);複製字串s,返回指向被複制的字串的指標,他由malloc()分配且使用後可以由free()釋放。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。
6.記憶體位元組複製
extern void *memcpy(void *dest, void *src, unsigned int count);//由src所指記憶體區域複製count個位元組到dest所指記憶體區域。src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。
extern void *memmove(void *dest, const void *src, unsigned int count);//同上,但src和dest所指記憶體區域可以重疊,而複製後src內容會被更改。函式返回指向dest的指標。
extern void movmem(void *src, void *dest, unsigned int count);//由src所指記憶體區域複製count個位元組到dest所指記憶體區域。src和dest所指記憶體區域可以重疊,但複製後src內容會被更改。函式返回指向dest的指標。
extern void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count);//由src所指記憶體區域複製不多於count個位元組到dest所指記憶體區域,如果遇到字元ch則停止複製。返回指向字元ch後的第一個字元的指標,如果src前n個位元組中不存在ch則返回NULL。ch被複制。
註釋:
記憶體位元組複製函式(如memcpy)和字串複製函式(如strcpy)間的關係是前者包含後者,即記憶體位元組複製函式(如memcpy)可以用於任何資料型別(void *)的dest和任何資料型別(void *)的src之間的複製,而字串複製函式(如strcpy)則只能用於char資料型別的dest和char 資料型別的src之間的複製。 其他記憶體位元組處理函式(即函式名以mem為開頭的函式)和字串處理函式(即函式名以str為開頭的函式)間的關係也是類似於此。
7.查詢
extern char *strchr(char *s,char c);//查詢字串s中首次出現字元c的位置。返回首次出現c的位置的指標,如果s中不存在c則返回NULL。
extern int strcspn(char *s1,char *s2);//在字串s1中搜尋s2中所出現的字元。返回第一個出現的字元在s1中的下標值,即在s1中出現而s2中沒有出現的子串的長度。
extern char *strpbrk(char *s1, char *s2);//在字串s1中尋找字串s2中任何一個字元相匹配的第一個字元的位置,空字元NULL不包括在內。返回指向s1中第一個相匹配的字元的指標,如果沒有匹配字元則返回空指標NULL。
extern char *strstr(char *haystack, char *needle);//從字串haystack中尋找needle第一次出現的位置(不比較結束符NULL)。返回指向第一次出現needle位置的指標,如果沒找到則返回NULL。
8.記憶體位元組查詢
extern void *memchr(void *buf, char ch, unsigned count);//從buf所指記憶體區域的前count個位元組查詢字元ch。如果成功,返回指向字元ch的指標;否則返回NULL。
9.轉換
extern char *strlwr(char *s);//將字串s轉換為小寫形式。
extern char *strupr(char *s);//將字串s轉換為大寫形式
10.重置
extern char *strset(char *s, char c);//把字串s中的所有字元都設定成字元c。返回指向s的指標。
extern void bzero(void *s, int n);//置位元組字串s的前n個位元組為零。
extern void setmem(void *buf, unsigned int count, char ch);//把buf所指記憶體區域前count個位元組設定成字元ch。
extern void *memset(void *buffer, int c, int count);//把buffer所指記憶體區域的前count個位元組設定成字元c。返回指向buffer的指標。
11.倒序
extern char *strrev(char *s);//把字串s的所有字元的順序顛倒過來(不包括空字元NULL)。返回指向顛倒順序後的字串指標。
12.分割字串
extern char *strtok(char *s, char *delim);//分解字串為一組標記串。s為要分解的字串,delim為分隔符字串。
說明:首次呼叫時,s必須指向要分解的字串,隨後呼叫要把s設成NULL。
strtok在s中查詢包含在delim中的字元並用NULL('\0')來替換,直到找遍整個字串。
返回指向下一個標記串。當沒有標記串時則返回空字元NULL。
C++語言中的字串處理函式:
string str;
1. 字串長度
len = str.length();
len = str.size();
2. 字串比較
可以直接比較
也可以:
str1.compare(str2);
str1.compare(pos1,len1,str2,pos2,len2); 值為負,0 ,正。
nops 長度到完。
3. 附加
str1 += str2;
或
str1.append(str2);
str1.append(str2.pos2,len2);
4. 字串提取
str2 = str1.substr();
str2 = str1.substr(pos1);
str2 = str1.substr(pos1,len1);
5. 字串搜尋
where = str1.find(str2);
where = str1.find(str2,pos1); pos1是從str1的第幾位開始。
where = str1.rfind(str2); 從後往前搜。
6. 插入字串
不是賦值語句。
str1.insert(pos1,str2);
str1.insert(pos1,str2,pos2,len2);
str1.insert(pos1,numchar,char); numchar是插入次數,char是要插入的字元。
7. 替換字串
str1.replace(pos1,str2);
str1.replace(pos1,str2,pos2,len2);
8. 刪除字串
str.erase(pos,len)
str.clear();
9. 交換字串
swap(str1,str2);
10. C --> C++
char *cstr = "Hello";
string str1;
cstr = cstr;
string str2(cstr);
1. 字串長度
extern int strlen(char *s); //返回s的長度,不包括結束符NULL。該函式以結束符為判斷字串長度結束的標誌。
註釋:
沒有memsize函式或是memlen函式嗎?
2. 字串比較
extern int strcmp(char *s1,char * s2);
extern int strncmp(char *s1,char * s2,int n);// 比較字串s1和s2的前n個字元。
extern int stricmp(char *s1,char * s2);//比較字串s1和s2,但不區分字母的大小寫。
extern int strnicmp(char *s1,char * s2,int n);//比較字串s1和s2的前n個字元但不區分大小寫。
extern int bcmp(const void *s1, const void *s2, int n);//比較字串s1和s2的前n個位元組是否相等,如果s1=s2或n=0則返回零,否則返回非零值。bcmp不檢查NULL。
說明:當s1<s2時,返回值<0;當s1=s2時,返回值=0;當s1>s2時,返回值>0
3. 記憶體位元組比較
extern int memcmp(void *buf1, void *buf2, unsigned int count);
extern int memicmp(void *buf1, void *buf2, unsigned int count);//比較時不區分字母的大小寫。
說明:比較記憶體區域buf1和buf2的前count個位元組。
當buf1<buf2時,返回值<0
當buf1=buf2時,返回值=0
當buf1>buf2時,返回值>0
4.附加
extern char *strcat(char *dest,char *src);//把src所指字串新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
extern char *strncat(char *dest,char *src,int n);//把src所指字串的前n個字元新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。
5.(字串)複製
extern char *strcpy(char *dest,char *src);//把src所指由NULL結束的字串複製到dest所指的陣列中。
extern char *stpcpy(char *dest,char *src);//同上
extern char *strncpy(char *dest, char *src, int n);//把src所指由NULL結束的字串的前n個位元組複製到dest所指的陣列中。
extern void bcopy(const void *src, void *dest, int n);//將字串src的前n個位元組複製到dest中,bcopy不檢查字串中的空位元組NULL,函式沒有返回值。
extern char *strdup(char *s);複製字串s,返回指向被複制的字串的指標,他由malloc()分配且使用後可以由free()釋放。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。
6.記憶體位元組複製
extern void *memcpy(void *dest, void *src, unsigned int count);//由src所指記憶體區域複製count個位元組到dest所指記憶體區域。src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。
extern void *memmove(void *dest, const void *src, unsigned int count);//同上,但src和dest所指記憶體區域可以重疊,而複製後src內容會被更改。函式返回指向dest的指標。
extern void movmem(void *src, void *dest, unsigned int count);//由src所指記憶體區域複製count個位元組到dest所指記憶體區域。src和dest所指記憶體區域可以重疊,但複製後src內容會被更改。函式返回指向dest的指標。
extern void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count);//由src所指記憶體區域複製不多於count個位元組到dest所指記憶體區域,如果遇到字元ch則停止複製。返回指向字元ch後的第一個字元的指標,如果src前n個位元組中不存在ch則返回NULL。ch被複制。
註釋:
記憶體位元組複製函式(如memcpy)和字串複製函式(如strcpy)間的關係是前者包含後者,即記憶體位元組複製函式(如memcpy)可以用於任何資料型別(void *)的dest和任何資料型別(void *)的src之間的複製,而字串複製函式(如strcpy)則只能用於char資料型別的dest和char 資料型別的src之間的複製。
7.查詢
extern char *strchr(char *s,char c);//查詢字串s中首次出現字元c的位置。返回首次出現c的位置的指標,如果s中不存在c則返回NULL。
extern int strcspn(char *s1,char *s2);//在字串s1中搜尋s2中所出現的字元。返回第一個出現的字元在s1中的下標值,即在s1中出現而s2中沒有出現的子串的長度。
extern char *strpbrk(char *s1, char *s2);//在字串s1中尋找字串s2中任何一個字元相匹配的第一個字元的位置,空字元NULL不包括在內。返回指向s1中第一個相匹配的字元的指標,如果沒有匹配字元則返回空指標NULL。
extern char *strstr(char *haystack, char *needle);//從字串haystack中尋找needle第一次出現的位置(不比較結束符NULL)。返回指向第一次出現needle位置的指標,如果沒找到則返回NULL。
8.記憶體位元組查詢
extern void *memchr(void *buf, char ch, unsigned count);//從buf所指記憶體區域的前count個位元組查詢字元ch。如果成功,返回指向字元ch的指標;否則返回NULL。
9.轉換
extern char *strlwr(char *s);//將字串s轉換為小寫形式。
extern char *strupr(char *s);//將字串s轉換為大寫形式
10.重置
extern char *strset(char *s, char c);//把字串s中的所有字元都設定成字元c。返回指向s的指標。
extern void bzero(void *s, int n);//置位元組字串s的前n個位元組為零。
extern void setmem(void *buf, unsigned int count, char ch);//把buf所指記憶體區域前count個位元組設定成字元ch。
extern void *memset(void *buffer, int c, int count);//把buffer所指記憶體區域的前count個位元組設定成字元c。返回指向buffer的指標。
11.倒序
extern char *strrev(char *s);//把字串s的所有字元的順序顛倒過來(不包括空字元NULL)。返回指向顛倒順序後的字串指標。
12.分割字串
extern char *strtok(char *s, char *delim);//分解字串為一組標記串。s為要分解的字串,delim為分隔符字串。
說明:首次呼叫時,s必須指向要分解的字串,隨後呼叫要把s設成NULL。
strtok在s中查詢包含在delim中的字元並用NULL('\0')來替換,直到找遍整個字串。
返回指向下一個標記串。當沒有標記串時則返回空字元NULL。
C++語言中的字串處理函式:
string str;
1. 字串長度
len = str.length();
len = str.size();
2. 字串比較
可以直接比較
也可以:
str1.compare(str2);
str1.compare(pos1,len1,str2,pos2,len2); 值為負,0 ,正。
nops 長度到完。
3. 附加
str1 += str2;
或
str1.append(str2);
str1.append(str2.pos2,len2);
4. 字串提取
str2 = str1.substr();
str2 = str1.substr(pos1);
str2 = str1.substr(pos1,len1);
5. 字串搜尋
where = str1.find(str2);
where = str1.find(str2,pos1); pos1是從str1的第幾位開始。
where = str1.rfind(str2); 從後往前搜。
6. 插入字串
不是賦值語句。
str1.insert(pos1,str2);
str1.insert(pos1,str2,pos2,len2);
str1.insert(pos1,numchar,char); numchar是插入次數,char是要插入的字元。
7. 替換字串
str1.replace(pos1,str2);
str1.replace(pos1,str2,pos2,len2);
8. 刪除字串
str.erase(pos,len)
str.clear();
9. 交換字串
swap(str1,str2);
10. C --> C++
char *cstr = "Hello";
string str1;
cstr = cstr;
string str2(cstr);