1. 程式人生 > >C/C++ 字串處理函式

C/C++ 字串處理函式

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);