1. 程式人生 > >C/C++ 記憶體塊和字串操作函式

C/C++ 記憶體塊和字串操作函式

一、 記憶體塊操作:
1. 將dest前面count個字元置為字元c,返回dest的值
voidmemset( void *dest,int c,size_t count );

2. 從src複製count位元組的字元到dest,返回dest的值。
 如果src和dest出現重疊,函式會自動處理。
voidmemmove(void *dest,const void *src,size_t count);

3. 從src複製count位元組的字元到dest,返回dest的值。
 與memmove功能一樣,只是不能處理src和dest出現重疊
voidmemcpy(void *dest,const void *src,size_t count);


  4. 在buf前面count位元組中查詢首次出現字元c的位置,
      操作成功則返回buf中首次出現c的位置指標,否則返回NULL。
      找到了字元c或者已經搜尋了count個位元組,查詢即停止。
void* memchr(const void *buf,int c,size_t count);

5. 從src複製0個或多個位元組的字元到dest,
 當字元c被複制或者count個字元被複制時,複製停止。
 如果字元c被複制,函式返回這個字元後面緊挨一個字元位置的指標,否則返回NULL。
void* memccpy(void *dest,const void *src,int c,size_t count);


6. 比較buf1和buf2前面count個位元組大小。
 返回值 < 0,表示buf1小於buf2;
 返回值為0,表示buf1等於buf2;
 返回值 > 0,表示buf1大於buf2;
int memcmp(const void *buf1,const void *buf2,size_t count);

7. 比較buf1和buf2前面count個位元組。
  與memcmp不同的是它不區分大小寫,相同的是返回值。
int memicmp(const void *buf1,const void *buf2,size_t count);

二、字串操作:
1. 獲取字串長度,字串結束符NULL不計算在內。

  沒有返回值指示操作錯誤。
size_t strlen(const char *string);

2. 將字串string中的字元順序顛倒過來,NULL結束符位置不變。
  返回調整後的字串的指標
char* strrev(char *string);

3. 將string中所有小寫字母替換成相應的大寫字母,其它字元保持不變。
  返回調整後的字串的指標。
char* strupr(char *string);

4. 將string中所有大寫字母替換成相應的小寫字母,其它字元保持不變。
 返回調整後的字串的指標。
char* strlwr(char *string);

5. 查詢字元c在字串string中首次出現的位置,NULL結束符也包含在查詢中。
 返回一個指標指向字元c在字串string中首次出現的位置。沒有找到,則返回NULL。
char* strchr(const char *string,int c);

6. 查詢字元c在字串string中最後一次出現的位置,
  也就是對string進行反序搜尋,包含NULL結束符。
 返回一個指標,指向字元c在字串string中最後一次出現的位置,
 如果沒有找到,則返回NULL。
char* strrchr(const char *string,int c);

7. 在字串string中查詢strSearch子串。
 返回子串strSearch在string中首次出現位置的指標。
  如果沒有找到子串strSearch,則返回NULL。
  如果子串strSearch為空串,函式返回string的指標。
char* strstr(const char *string,const char *strSearch);

8. 函式執行中會自己呼叫malloc函式為複製strSource字串分配儲存空間,
  然後再將strSource複製到分配到的空間中。
  注意要及時釋放這個分配的空間。
  返回一個指標指向為複製字串分配的空間。
 如果分配空間失敗,則返回NULL值。
char* strdup(const char *strSource);

9. 將源串strSource新增到目標串strDestination後面,
  並在得到的新串後面加上NULL結束符。
  源串strSource的字元會覆蓋目標串strDestination後面的結束符NULL。
  在字串的複製或新增過程中沒有溢位檢查,所以要保證目標串空間足夠大。
  不能處理源串與目標串重疊的情況。
  函式返回strDestination值。
char* strcat(char *strDestination,const char *strSource);

10. 將源串strSource開始的count個字元新增到目標串strDest後。
  源串strSource的字元會覆蓋目標串strDestination後面的結束符NULL。
  如果count大於源串長度,則會用源串的長度值替換count值。
  得到的新串後面會自動加上NULL結束符。
  與strcat函式一樣,本函式不能處理源串與目標串重疊的情況。
  函式返回strDestination值。
char* strncat(char *strDestination,const char *strSource,size_t count);

11. 複製源串strSource到目標串strDestination所指定的位置,包含NULL結束符。
  不能處理源串與目標串重疊的情況,函式返回strDestination值。
char* strcpy(char *strDestination,const char *strSource);

12. 將源串strSource開始的count個字元複製到目標串strDestination所指定的位置。
  如果count值小於或等於strSource串的長度,不會自動新增NULL結束符到目標串中。
  如果count大於strSource串的長度時,
  則將strSource用NULL結束符填充補齊count個字元,複製到目標串中。
  不能處理源串與目標串重疊的情況,函式返回strDestination值。
char* strncpy(char *strDestination,const char *strSource,size_t count);

13. 將string串的所有字元設定為字元c,遇到NULL結束符停止。
  函式返回內容調整後的string指標。
char* strset(char *string,int c);

14. 將string串開始count個字元設定為字元c,
  如果count值大於string串的長度,將用string的長度替換count值。
  函式返回內容調整後的string指標。
char* strnset(char *string,int c,size_t count);

15. 查詢任何一個不包含在strCharSet串中的字元 (字串結束符NULL除外)
  在string串中首次出現的位置序號。
  返回一個整數值,指定在string中全部由characters中的字元組成的子串的長度。
  如果string以一個不包含在strCharSet中的字元開頭,函式將返回0值。
size_t strspn(const char *string,const char *strCharSet);

16. 查詢strCharSet串中任何一個字元在string串中首次出現的位置序號,
  包含字串結束符NULL。
  返回一個整數值,指定在string中全部由非characters中的字元組成的子串的長度。
  如果string以一個包含在strCharSet中的字元開頭,函式將返回0值。
size_t strcspn(const char *string,const char *strCharSet);

17. 查詢任何一個不包含在strCharSet串中的字元 (字串結束符NULL除外)
  在string串中首次出現的位置指標。
  返回一個指標,指向非strCharSet中的字元在string中首次出現的位置。
char* strspnp(const char *string,const char *strCharSet);

18. 查詢strCharSet串中任何一個字元在string串中首次出現的位置,
  不包含字串結束符NULL。
  返回一個指標指向strCharSet中任一字元在string中首次出現的位置。
  如果兩個字串引數不含相同字元,則返回NULL值。
char* strpbrk(const char *string,const char *strCharSet);

19. 比較字串string1和string2大小。
  返回值 < 0,表示string1小於string2;
  返回值為0,表示string1等於string2;
  返回值 > 0,表示string1大於string2;
int strcmp(const char *string1,const char *string2);

20. 比較字串string1和string2大小,和strcmp不同,比較的是它們的小寫字母版本。
  返回值與strcmp相同。
int stricmp(const char *string1,const char *string2);

21. 等價於stricmp函式,只是提供一個向後相容的版本。
int strcmpi(const char *string1,const char *string2);

22. 比較字串string1和string2大小,只比較前面count個字元。
  比較過程中任何一個字串的長度小於count,則count將被較短的字串的長度取代。
  此時如果兩串前面的字元都相等,則較短的串要小。
  返回值< 0,表示string1的子串小於string2的子串;
  返回值為0,表示string1的子串等於string2的子串;
  返回值> 0,表示string1的子串大於string2的子串;
int strncmp(const char *string1,const char *string2,size_t count);

23. 比較字串string1和string2大小,只比較前面count個字元。
  與strncmp不同的是,比較的是它們的小寫字母版本。
  返回值與strncmp相同。
int strnicmp(const char *string1,const char *string2,size_t count);

24. 在strToken 串中查詢下一個標記,
   strDelimit字符集則指定了在當前查詢呼叫中可能遇到的分界符。
   返回一個指標指向在strToken中找到的下一個標記。
   如果找不到標記,就返回NULL值。
   每次呼叫都會修改strToken內容,用NULL字元替換遇到的每個分界符。
char* strtok(char *strToken,const char *strDelimit);
char input[16] = "abc,d";
char *p = NULL;

p = strtok(input, ",");

if (p)
 printf("%sn", p);

p = strtok( NULL, ",");

if (p)
 printf("%sn", p);

return 0;