C語言里字符串的解析


 

 
根據給定的字符串,按照一定規則解析字符串,卡住好幾次,這次做個筆記,以供參考

函數名稱:   strtok 
函數原型:   char *strtok(char *s1, const char *s2) 
函數功能:   分解s1字符串為用特定分隔符分隔的多個字符串(一般用於將英文句分解為單詞) 
函數返回:   字符串s1中首次出現s2中的字符前的子字符串指針 
參數說明:   s2一般設置為s1中的分隔字符 
        規定進行子調用時(即分割s1的第二、三及后續子串)第一參數必須是NULL 
        在每一次匹配成功后,將s1中分割出的子串位置替換為NULL(摘下鏈中第一個環),因此s1被破壞了 
        函數會記憶指針位置以供下一次調用 
         
所屬文件:   <string.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char *p; 
  char *buffer; 
  char *delims={ " .," };

  buffer=strdup("Find words, all of them."); 
  printf("%s\n",buffer); 
  p=strtok(buffer,delims); 
  while(p!=NULL){ 
    printf("word: %s\n",p); 
    p=strtok(NULL,delims); 
  } 
  printf("%s\n",buffer); 
  return 0; 
}





@函數名稱:   strdup 
函數原型:   char *strdup(const char *s) 
函數功能:   字符串拷貝,目的空間由該函數分配  
函數返回:   指向拷貝后的字符串指針 
參數說明:   src-待拷貝的源字符串 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
#include <alloc.h> 
int main() 

  char *dup_str, *string="abcde"; 
  dup_str=strdup(string); 
  printf("%s", dup_str); 
  free(dup_str); 
  return 0; 
}


@函數名稱:   strcpy 
函數原型:   char* strcpy(char* str1,char* str2); 
函數功能:   把str2指向的字符串拷貝到str1中去 
函數返回:   返回str1,即指向str1的指針 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char string[10]; 
  char *str1="abcdefghi"; 
  strcpy(string,str1); 
  printf("the string is:%s\n",string); 
  return 0; 
}


@函數名稱:   strncpy 
函數原型:   char *strncpy(char *dest, const char *src,int count) 
函數功能:   將字符串src中的count個字符拷貝到字符串dest中去 
函數返回:   指向dest的指針 
參數說明:   dest-目的字符串,src-源字符串,count-拷貝的字符個數 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char string[10]; 
  char *str1="abcdefghi"; 
  strncpy(string,str1,3); 
  string[3]='\0'; 
  printf("%s",string); 
  return 0; 
}


@函數名稱:   strcat 
函數原型:   char* strcat(char * str1,char * str2); 
函數功能:   把字符串str2接到str1后面,str1最后的'\0'被取消 
函數返回:   str1 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h>

int main() 

  char buffer[80];

  strcpy(buffer,"Hello "); 
  strcat(buffer,"world"); 
  printf("%s\n",buffer); 
  return 0; 
}


@函數名稱:   strncat 
函數原型:   char *strncat(char *dest, const char *src, size_t maxlen) 
函數功能:   將字符串src中前maxlen個字符連接到dest中 
函數返回: 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h>

char buffer[80];

int main() 

  strcpy(buffer,"Hello "); 
  strncat(buffer,"world",8); 
  printf("%s\n",buffer); 
  strncat(buffer,"*************",4); 
  printf("%s\n",buffer); 
  return 0; 
}


@函數名稱:   strcmp 
函數原型:   int strcmp(char * str1,char * str2); 
函數功能:   比較兩個字符串str1,str2. 
函數返回:   str1<str2,返回負數; str1=str2,返回 0; str1>str2,返回正數.  
參數說明: 
所屬文件:   <string.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char *buf1="aaa", *buf2="bbb", *buf3="ccc"; 
  int ptr; 
  ptr=strcmp(buf2, buf1); 
  if(ptr>0) 
    printf("buffer 2 is greater than buffer 1\n"); 
  else 
    printf("buffer 2 is less than buffer 1\n"); 
  ptr=strcmp(buf2, buf3); 
  if(ptr>0) 
    printf("buffer 2 is greater than buffer 3\n"); 
  else 
    printf("buffer 2 is less than buffer 3\n"); 
  return 0; 
}


@函數名稱:   strncmp 
函數原型:   int strncmp(char *str1,char *str2,int count) 
函數功能:   對str1和str2中的前count個字符按字典順序比較 
函數返回:   小於0:str1<str2,等於0:str1=str2,大於0:str1>str2 
參數說明:   str1,str2-待比較的字符串,count-比較的長度 
所屬文件:   <string.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  int ptr; 
   char *buf1="aaabbb",*buf2="bbbccc",*buf3="ccc"; 
  ptr=strncmp(buf2,buf1,3); 
  if (ptr>0) 
    printf("buffer 2 is greater than buffer 1"); 
  else 
    printf("buffer 2 is less than buffer 1"); 
    ptr=strncmp(buf2,buf3,3); 
  if (ptr>0) 
    printf("buffer 2 is greater than buffer 3"); 
  else 
    printf("buffer 2 is less than buffer 3"); 
  return(0); 
}


@函數名稱:   strpbrk 
函數原型:   char *strpbrk(const char *s1, const char *s2) 
函數功能:   得到s1中第一個“同時也出現在s2中”字符的位置指針 
函數返回:   位置指針 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
int main() 

char *p="Find all vowels";

while(p) 

  printf("%s\n",p); 
  p=strpbrk(p+1,"aeiouAEIOU"); 

return 0; 
}


@函數名稱:   strcspn 
函數原型:   int strcspn(const char *s1, const char *s2) 
函數功能:   統計s1中從頭開始直到第一個“來自s2中的字符”出現的長度 
函數返回:   長度 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h>

int main() 

  printf("%d\n",strcspn("abcbcadef","cba")); 
  printf("%d\n",strcspn("xxxbcadef","cba")); 
  printf("%d\n",strcspn("123456789","cba")); 
  return 0; 
}


@函數名稱:   strspn 
函數原型:   int strspn(const char *s1, const char *s2) 
函數功能:   統計s1中從頭開始直到第一個“不來自s2中的字符”出現的長度 
函數返回:   位置指針 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
#include <alloc.h> 
int main() 

  printf("%d\n",strspn("out to lunch","aeiou")); 
  printf("%d\n",strspn("out to lunch","xyz")); 
  return 0; 
}


@函數名稱:   strchr 
函數原型:   char* strchr(char* str,char ch); 
函數功能:   找出str指向的字符串中第一次出現字符ch的位置 
函數返回:   返回指向該位置的指針,如找不到,則返回空指針 
參數說明:   str-待搜索的字符串,ch-查找的字符 
所屬文件:   <string.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char string[15]; 
  char *ptr, c='r'; 
  strcpy(string, "This is a string"); 
  ptr=strchr(string, c); 
  if (ptr) 
    printf("The character %c is at position: %d\n",c,ptr-string); 
  else 
    printf("The character was not found\n"); 
  return 0; 
}


@函數名稱:   strrchr 
函數原型:   char *strrchr(const char *s, int c) 
函數功能:   得到字符串s中最后一個含有c字符的位置指針 
函數返回:   位置指針 
參數說明: 
所屬文件:   <string.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char string[15]; 
  char *ptr,c='r'; 
  strcpy(string,"This is a string"); 
  ptr=strrchr(string,c); 
  if (ptr) 
    printf("The character %c is at position:%d",c,ptr-string); 
  else 
    printf("The character was not found"); 
  return 0; 
}


@函數名稱:   strstr 
函數原型:   char* strstr(char* str1,char* str2); 
函數功能:   找出str2字符串在str1字符串中第一次出現的位置(不包括str2的串結束符) 
函數返回:   返回該位置的指針,如找不到,返回空指針 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char *str1="Open Watcom C/C++",*str2="Watcom",*ptr; 
  ptr=strstr(str1,str2); 
  printf("The substring is:%s\n",ptr); 
  return 0; 
}


@函數名稱:   strrev 
 函數原型:   char *strrev(char *s) 
函數功能:   將字符串中的所有字符顛倒次序排列 
函數返回:   指向s的指針  
參數說明: 
所屬文件:   <string.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char *forward="string"; 
  printf("Before strrev():%s",forward); 
  strrev(forward); 
  printf("After strrev(): %s",forward); 
  return 0; 
}


@函數名稱:   strnset 
函數原型:   char *strnset(char *s, int ch, size_t n) 
函數功能:   將字符串s中前n個字符設置為ch的值 
函數返回:   指向s的指針 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char *string="abcdefghijklmnopqrstuvwxyz"; 
  char letter='x'; 
  printf("string before strnset: %s",string); 
  strnset(string,letter,13); 
  printf("string after strnset: %s",string); 
  return 0; 
}


@函數名稱:   strset 
函數原型:   char *strset(char *s, int ch) 
函數功能:   將字符串s中所有字符設置為ch的值 
函數返回:   指向s的指針  
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char string[10]="123456789"; 
  char symbol='c'; 
  printf("Before strset(): %s", string); 
  strset(string, symbol); 
  printf("After strset(): %s", string); 
  return 0; 
}


@函數名稱:   strtok 
函數原型:   char *strtok(char *s1, const char *s2) 
函數功能:   分解s1字符串為用特定分隔符分隔的多個字符串(一般用於將英文句分解為單詞) 
函數返回:   字符串s1中首次出現s2中的字符前的子字符串指針 
參數說明:   s2一般設置為s1中的分隔字符 
        規定進行子調用時(即分割s1的第二、三及后續子串)第一參數必須是NULL 
        在每一次匹配成功后,將s1中分割出的子串位置替換為NULL(摘下鏈中第一個環),因此s1被破壞了 
        函數會記憶指針位置以供下一次調用 
         
所屬文件:   <string.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char *p; 
  char *buffer; 
  char *delims={ " .," };

  buffer=strdup("Find words, all of them."); 
  printf("%s\n",buffer); 
  p=strtok(buffer,delims); 
  while(p!=NULL){ 
    printf("word: %s\n",p); 
    p=strtok(NULL,delims); 
  } 
  printf("%s\n",buffer); 
  return 0; 
}


@函數名稱:   strupr 
函數原型:   char *strupr(char *s) 
函數功能:   將字符串s中的字符變為大寫 
函數返回: 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char *string="abcdefghijklmnopqrstuvwxyz",*ptr; 
  ptr=strupr(string); 
  printf("%s",ptr); 
  return 0; 
}


@函數名稱:   strlwr 
函數原型:   char *strlwr(char *s) 
函數功能:   將字符串中的字符變為小寫字符 
函數返回:   指向s的指針 
參數說明: 
所屬文件:   <string.h>

#include<string.h> 
int main() 

  char str[]="HOW TO SAY?"; 
  printf("%s",strlwr(str)); 
  return 0; 
}


@函數名稱:   strlen 
函數原型:   unsigned int strlen(char * str); 
函數功能:   統計字符串str中字符的個數(不包括終止符'\0') 
函數返回:   返回字符串的長度. 
參數說明: 
所屬文件:   <string.h>

#include <stdio.h> 
#include<string.h> 
int main() 

  char str[]="how are you!"; 
  printf("the lence is:%d\n",strlen(str)); 
  return 0; 
}


@函數名稱:   strerror 
函數原型:   char *strerror(int errnum) 
函數功能:   得到錯誤信息的內容信息 
 函數返回:   錯誤提示信息字符串指針 
參數說明:   errnum-錯誤編號 
所屬文件:   <string.h>

#include <stdio.h> 
#include <errno.h> 
int main() 

  char *buffer; 
  buffer=strerror(errno); 
  printf("Error: %s",buffer); 
  return 0; 
}


@函數名稱:   memcpy 
函數原型:   void *memcpy(void *dest, const void *src, size_t n) 
函數功能:   字符串拷貝 
函數返回:   指向dest的指針 
參數說明:   src-源字符串,n-拷貝的最大長度 
所屬文件:   <string.h>,<mem.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char src[]="******************************"; 
  char dest[]="abcdefghijlkmnopqrstuvwxyz0123456709"; 
  char *ptr; 
  printf("destination before memcpy:%s\n",dest); 
  ptr=memcpy(dest,src,strlen(src)); 
  if (ptr) 
    printf("destination after memcpy:%s\n",dest); 
  else 
    printf("memcpy failed"); 
  return 0; 
}


@函數名稱:   memccpy 
函數原型:   void *memccpy(void *dest, const void *src, int c, size_t n) 
函數功能:   字符串拷貝,到指定長度或遇到指定字符時停止拷貝 
函數返回: 
參數說明:   src-源字符串指針,c-中止拷貝檢查字符,n-長度,dest-拷貝底目的字符串指針 
所屬文件:   <string.h>,<mem.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char *src="This is the source string"; 
  char dest[50]; 
  char *ptr; 
  ptr=memccpy(dest,src,'c',strlen(src)); 
  if (ptr) 
  { 
    *ptr='\0'; 
    printf("The character was found:%s",dest); 
  } 
  else 
    printf("The character wasn't found"); 
  return 0; 
}


@函數名稱:   memchr 
函數原型:   void *memchr(const void *s, int c, size_t n) 
函數功能:   在字符串中第開始n個字符中尋找某個字符c的位置 
函數返回:   返回c的位置指針,返回NULL時表示未找到 
參數說明:   s-要搜索的字符串,c-要尋找的字符,n-指定長度 
所屬文件:   <string.h>,<mem.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char str[17]; 
  char *ptr; 
  strcpy(str,"This is a string"); 
  ptr=memchr(str,'r',strlen(str)); 
  if (ptr) 
  printf("The character 'r' is at position: %d",ptr-str); 
  else 
  printf("The character was not found"); 
  return 0; 
}


@函數名稱:   memcmp 
函數原型:   int memcmp(const void *s1, const void *s2,size_t n) 
函數功能:   按字典順序比較兩個串s1和s2的前n個字節  
函數返回:   <0,=0,>0分別表示s1<,=,>s2 
參數說明:   s1,s2-要比較的字符串,n-比較的長度 
所屬文件:   <string.h>,<mem.h>

#include <stdio.h> 
#include <string.h> 
int main()  
{  
  char *buf1="ABCDE123";  
  char *buf2="abcde456";  
  int stat;  
  stat=memcmp(buf1,buf2,5);  
  printf("The strings to position 5 are ");  
  if(stat) printf("not ");  
  printf("the same\n");  
  return 0;  

 

@函數名稱:   memicmp 
函數原型:   int memicmp(const void *s1, const void *s2, size_t n) 
函數功能:   按字典順序、不考慮字母大小寫對字符串s1,s2前n個字符比較 
函數返回:   <0,=0,>0分別表示s1<,=,>s2 
參數說明:   s1,s2-要比較的字符串,n-比較的長度 
所屬文件:   <string.h>,<mem.h>

#include <stdio.h> 
#include <string.h> 
int main() 

  char *buf1="ABCDE123"; 
  char *buf2="abcde456"; 
  int stat; 
  stat=memicmp(buf1,buf2,5); 
  printf("The strings to position 5 are "); 
  if(stat) printf("not"); 
  printf("the same"); 
  return 0; 
}


@函數名稱:   memmove 
函數原型:   void *memmove(void *dest, const void *src, size_t n) 
函數功能:   字符串拷貝 
函數返回:   指向dest的指針 
參數說明:   src-源字符串,n-拷貝的最大長度 
所屬文件:   <string.h>,<mem.h>

#include <string.h> 
#include <stdio.h> 
int main() 

  char dest[40]="abcdefghijklmnopqrstuvwxyz0123456789"; 
  printf("destination prior to memmove:%s\n",dest); 
  memmove(dest+1,dest,35); 
  printf("destination after memmove:%s",dest); 
  return 0; 
}


@函數名稱:   memset 
函數原型:   void *memset(void *s, int c, size_t n) 
函數功能:   字符串中的n個字節內容設置為c 
函數返回: 
參數說明:   s-要設置的字符串,c-設置的內容,n-長度 
所屬文件:   <string.h>,<mem.h>

#include <string.h> 
#include <stdio.h> 
#include <mem.h> 
int main() 

  char buffer[]="Hello world"; 
  printf("Buffer before memset:%s\n",buffer); 
  memset(buffer,'*',strlen(buffer)-1); 
  printf("Buffer after memset:%s",buffer); 
  return 0; 

 
轉:http://guangming008.blog.163.com/blog/static/12039682008238485736/
 
 
 

1)字符串操作 
strcpy(p, p1) 復制字符串 
strncpy(p, p1, n) 復制指定長度字符串 
strcat(p, p1) 附加字符串 
strncat(p, p1, n) 附加指定長度字符串 
strlen(p) 取字符串長度 
strcmp(p, p1) 比較字符串 
strcasecmp忽略大小寫比較字符串
strncmp(p, p1, n) 比較指定長度字符串 
strchr(p, c) 在字符串中查找指定字符 
strrchr(p, c) 在字符串中反向查找 
strstr(p, p1) 查找字符串 
strpbrk(p, p1) 以目標字符串的所有字符作為集合,在當前字符串查找該集合的任一元素 
strspn(p, p1) 以目標字符串的所有字符作為集合,在當前字符串查找不屬於該集合的任一元素的偏移 
strcspn(p, p1) 以目標字符串的所有字符作為集合,在當前字符串查找屬於該集合的任一元素的偏移  
* 具有指定長度的字符串處理函數在已處理的字符串之后填補零結尾符 

2)字符串到數值類型的轉換 
strtod(p, ppend) 從字符串 p 中轉換 double 類型數值,並將后續的字符串指針存儲到 ppend 指向的 char* 類型存儲。
strtol(p, ppend, base) 從字符串 p 中轉換 long 類型整型數值,base 顯式設置轉換的整型進制,設置為 0 以根據特定格式判斷所用進制,0x, 0X 前綴以解釋為十六進制格式整型,0    前綴以解釋為八進制格式整型
atoi(p) 字符串轉換到 int 整型 
atof(p) 字符串轉換到 double 符點數 
atol(p) 字符串轉換到 long 整型 

3)字符檢查 
isalpha() 檢查是否為字母字符 
isupper() 檢查是否為大寫字母字符 
islower() 檢查是否為小寫字母字符 
isdigit() 檢查是否為數字 
isxdigit() 檢查是否為十六進制數字表示的有效字符 
isspace() 檢查是否為空格類型字符 
iscntrl() 檢查是否為控制字符 
ispunct() 檢查是否為標點符號 
isalnum() 檢查是否為字母和數字 
isprint() 檢查是否是可打印字符 
isgraph() 檢查是否是圖形字符,等效於 isalnum() | ispunct() 

4)函數原型
原型:strcpy(char destination[], const char source[]); 
功能:將字符串source拷貝到字符串destination中 
例程:  
 #include <iostream.h> 
#include <string.h> 
void main(void) 

  char str1[10] = { "TsinghuaOK"}; 
  char str2[10] = { "Computer"}; 
  cout <<strcpy(str1,str2)<<endl; 
}

運行結果是:Computer 
第二個字符串將覆蓋掉第一個字符串的所有內容! 
注意:在定義數組時,字符數組1的字符串長度必須大於或等於字符串2的字符串長度。不能用賦值語句將一個字符串常量或字符數組直接賦給一個字符數組。所有字符串處理函數都包含在頭文件string.h中。


strncpy(char destination[], const char source[], int numchars);

strncpy:將字符串source中前numchars個字符拷貝到字符串destination中。 
strncpy函數應用舉例 
原型:strncpy(char destination[], const char source[], int numchars); 
功能:將字符串source中前numchars個字符拷貝到字符串destination中 
例程: 

#include <iostream.h> 
#include <string.h> 
void main(void) 

  char str1[10] = { "Tsinghua "}; 
  char str2[10] = { "Computer"}; 
  cout <<strncpy(str1,str2,3)<<endl; 
}

運行結果:Comnghua 
注意:字符串source中前numchars個字符將覆蓋掉字符串destination中前numchars個字符!

原型:strcat(char target[], const char source[]); 
功能:將字符串source接到字符串target的后面 
例程: 
#include <iostream.h> 
#include <string.h> 
void main(void) 

  char str1[] = { "Tsinghua "}; 
  char str2[] = { "Computer"}; 
  cout <<strcpy(str1,str2)<<endl; 
}

運行結果:Tsinghua Computer

注意:在定義字符數組1的長度時應該考慮字符數組2的長度,因為連接后新字符串的長度為兩個字符串長度之和。進行字符串連接后,字符串1的結尾符將自動被去掉,在結尾串末尾保留新字符串后面一個結尾符。 

原型:strncat(char target[], const char source[], int numchars); 
功能:將字符串source的前numchars個字符接到字符串target的后面 
例程:

#include <iostream.h> 
#include <string.h> 
void main(void) 

  char str1[] = { "Tsinghua "}; 
  char str2[] = { "Computer"}; 
  cout <<strncat(str1,str2,3)<<endl; 
}

運行結果:Tsinghua Com


原型:int strcmp(const char firststring[], const char secondstring); 
功能:比較兩個字符串firststring和secondstring 
例程: 

#include <iostream.h> 
#include <string.h> 
void main(void) 

  char buf1[] = "aaa"; 
  char buf2[] = "bbb"; 
  char buf3[] = "ccc"; 
  int ptr;  
  ptr = strcmp(buf2,buf1);  
  if(ptr > 0) 
   cout <<"Buffer 2 is greater than buffer 1"<<endl; 
  else  
   cout <<"Buffer 2 is less than buffer 1"<<endl; 
  ptr = strcmp(buf2,buf3);  
  if(ptr > 0) 
   cout <<"Buffer 2 is greater than buffer 3"<<endl; 
  else  
   cout <<"Buffer 2 is less than buffer 3"<<endl; 
}

運行結果是:Buffer 2 is less than buffer 1  
                  Buffer 2 is greater than buffer 3


原型:strlen( const char string[] ); 
功能:統計字符串string中字符的個數 
例程: 

#include <iostream.h> 
#include <string.h> 
void main(void) 

  char str[100];  
  cout <<"請輸入一個字符串:"; 
  cin >>str; 
  cout <<"The length of the string is :"<<strlen(str)<<"個"<<endl; 
}

運行結果The length of the string is x (x為你輸入的字符總數字)

注意:strlen函數的功能是計算字符串的實際長度,不包括'\0'在內。另外,strlen函數也可以直接測試字符串常量的長度,如:strlen("Welcome")。

  
void *memset(void *dest, int c, size_t count);  
將dest前面count個字符置為字符c.  返回dest的值. 

void *memmove(void *dest, const void *src, size_t count);  
從src復制count字節的字符到dest. 如果src和dest出現重疊, 函數會自動處理.  返回dest的值. 

void *memcpy(void *dest, const void *src, size_t count);  
從src復制count字節的字符到dest. 與memmove功能一樣, 只是不能處理src和dest出現重疊.  返回dest的值. 

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

void *_memccpy(void *dest, const void *src, int c, size_t count);  
從src復制0個或多個字節的字符到dest. 當字符c被復制或者count個字符被復制時, 復制停止. 

如果字符c被復制, 函數返回這個字符后面緊挨一個字符位置的指針. 否則返回NULL. 

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

int memicmp(const void *buf1, const void *buf2, size_t count); 

比較buf1和buf2前面count個字節. 與memcmp不同的是, 它不區分大小寫. 

返回值同上. 

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

char *_strupr(char *string);  
將string中所有小寫字母替換成相應的大寫字母, 其它字符保持不變.  返回調整后的字符串的指針. 

char *_strlwr(char *string);  
將string中所有大寫字母替換成相應的小寫字母, 其它字符保持不變.  返回調整后的字符串的指針. 

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

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

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

char *strdup(const char *strSource);  
函數運行中會自己調用malloc函數為復制strSource字符串分配存儲空間, 然后再將strSource復制到分配到的空間中. 注意要及時釋放這個分配的空間. 
返回一個指針, 指向為復制字符串分配的空間; 如果分配空間失敗, 則返回NULL值. 

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

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

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

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

char *strset(char *string, int c);  
將string串的所有字符設置為字符c, 遇到NULL結束符停止. 函數返回內容調整后的string指針. 

char *strnset(char *string, int c, size_t count);  
將string串開始count個字符設置為字符c, 如果count值大於string串的長度, 將用string的長度替換count值. 函數返回內容調整后的string指針. 

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

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

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

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

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

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

int strcmpi(const char *string1, const char *string2);  
等價於stricmp函數, 只是提供一個向后兼容的版本. 

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

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

char *strtok(char *strToken, const char *strDelimit);  
在strToken 串中查找下一個標記, strDelimit字符集則指定了在當前查找調用中可能遇到的分界符. 返回一個指針, 指向在strToken中找到的下一個標記. 如果找不到標記, 就返回NULL值. 每次調用都會修改strToken內容, 用NULL字符替換遇到的每個分界符.

c++概念字符串操作 

一、char_traits 字符特征類 
1)意義:包裝特定串元素的通用行為界面,以便容器實現時依據特征信息而執行特定行為 
2)定義了通用類型名 

typedef _Elem char_type; 
typedef int int_type; 
typedef streampos pos_type; 
typedef streamoff off_type; 
typedef mbstate_t state_type; 

其中 int_type 表示字符元素轉換到特定編碼時的整型表示,pos_type, off_type 分別作為字符串索引和字符串元素偏移的類型,類似容器迭中的指針,迭代類型和指針,迭代器的偏移類型。最后的 state_type 用於存儲流狀態,如出錯,格式控制等等。 

3)定義了字符 / 字符串操作的包裝界面,以便通用算法的調用 

assign(a, b) 定義將 b 字符賦值給 a 字符的過程,實現 a.operator = 的行為 
eq(a, b) 定義 a 字符和 b 字符的相等關系,實現 a.operator == 的行為 
lt(a, b) 定義 a 小於 b 的關系,實現 a.operator < 的行為 
compare(a_ptr, b_ptr, cnt) 定義兩組字符串的比較,返回 int 類型,實現類似 memcmp 的行為 
length(ptr) 定義取字符串長度,實現類似 strlen 的行為 
copy(a_ptr, b_ptr, cnt) 定義兩組字符串的復制,實現類似 memcpy 的行為 
move(a_ptr, b_ptr, cnt) 定義兩組字符串的不重疊復制,實現類似 memmove 的行為 
assign(ptr, cnt, ch) 定義了填充字符串的過程,實現類似 memset 的行為 
to_int_type(ch) 定義了 char_type 到 int_type 整型的轉換過程 
to_char_type(n) 定義了 int_type 到 char_type 字符型的轉換過程 
eq_int_type(a, b) 定義兩個和當前 char_type 類型對應的 int_type 的相等關系 
eof() 定義字符串結尾符,使用整型表示 
not_eof(n) 定義非字符串結尾符,若輸入結尾符,則返回 1,其他輸入返回原值,即總是不返回 eof() 

4)int_type 類型應是當前字符類型的整型編碼 

 

二、std::string 並不是序列容器,沒有 front() 和 back() 界面用於取出前端和尾端的元素,使用 std::string::operator [] 並傳遞 streampos 類型取得特定元素,如 std::string::size() - 1 作為索引取得最后一個字符 


三、basic_string 支持的初始化 
1)默認初始化 
2)分配器 
3)復制構造 
4)局部復制 [_Roff, _Roff + _Count) 
5)局部復制 + 分配器 
6)C 字符串 [_Ptr, <null>) 
7)C 字符串 + _Count [_Ptr, _Ptr + _Count) 
8)C 字符串 + 分配器 
9)C 字符串 + _Count + 分配器 [_Ptr, _Ptr + _Count)

10)_Count * _Ch 
11)_Count * _Ch + 分配器 
12)迭代器 [_ItF, _ItL) 
13)迭代器 + 分配器 

字符到串不能初始化,但支持 operator = 賦值和 operator += 累加賦值運算。 

四、字符串的區間有效性 
對串的索引訪問在超過字符串的有效區間時,因為串的在實現上對內置的字符緩沖區執行下標訪問,所以不會導致異常,但是將得到不可預知的結果,通常是不可用的。
將其他字符串作為右值輸入時,對該串取出計數大於串大小時按串大小計算。 
std::basic_string::size_type 的實際類型為 size_t,在 Visual C++ 7.1 中實現為 unsigned,std::basic_string::npos 被靜態設定為 

(basic_string<_Elem, _Traits, _Alloc>::size_type)(-1); 

在查找子字符串等操作時,函數返回 npos 的值表示非法索引。 


五、比較字符串 
允許的比較對象 
1)compare(s2) 其他同類型字符串 
2)compare(p) C 風格字符串 
3)compare(off, cnt, s2) [off, off + cnt) 同 s2 執行比較 
4)compare(off, cnt, s2, off2, cnt2) [off, off + cnt) 同 s2 [off2, cnt2) 執行比較 
5)compare(off, cnt, p) [off, off + cnt) 同 [p , <null>) 執行比較 
6)compare(off, cnt, p, cnt2) [off, off + cnt) 同 [p, p + cnt2) 執行比較 

返回 -1, 0, 1 作為小於、等於和大於的比較結果。 

 六、附加數據 
1)使用 operator += 接受其他字符串,C 風格字符串和字符 
2)使用 push_back() 在尾部附加字符,並使得通過字符串構造的 back_iterator 可以訪問 
3)append() 附加 
        1、append(s) 追加字符串 
        2、append(s, off, cnt) 追加字符串 s [off, off + cnt) 
        3、append(p) 追加字符串 [p, <null>) 
        4、append(p, cnt) 追加字符串 [p, p + cnt) 
        5、append(n, c) 填充 n * c 
        6、append(InF, InL) 追加輸入流 [InF, InL) 

4)insert() 插入 
        1、insert(off, s2) 插入字符串 
        2、insert(off, s2, off2, cnt2) 插入字符串 s [off2, off2 + cnt2) 
        3、insert(off, p) 插入字符串 [p, <null>) 
        4、insert(off, p, cnt) 插入字符串 [p, p + cnt)

        5、insert(off, n, c) 插入 n * c 
        6、insert(iter) 元素默認值填充 
        7、insert(iter, c) 插入特定元素 
        8、insert(iter, n, c) 插入 n*c 
        9、insert(iter, InF, InL) 插入 [InF, InL) 

5)operator +(a, b) 
字符串關聯運算符重載中支持 operator + 的形式 
        1、s + s 
        2、s + p 
        3、s + c 
        4、p + s 
        5、c + s 

七、查找、替換和清除 
1)find() 查找 
        1、find(c, off) 在 s [off, npos) 中查找 c 
        2、find(p, off, n) 在 s [off, npos) 中查找 [p, p + n) 
        3、find(p, off) 在 s [off, npos) 中查找 [p, <null>) 
        4、find(s2, off) 在 s [off, npos) 中查找 s2 

2)find() 的變種 
        1、rfind() 具有 find() 的輸入形式,反序查找 
        2、find_first_of() 具有 find() 的輸入形式,返回第一個匹配的索引 
        3、find_last_of() 具有 find() 的輸入形式,返回倒數第一個匹配的索引 
        4、find_first_not_of() 具有 find() 的輸入形式,返回第一個不匹配的索引 
        5、find_last_not_of() 具有 find() 的輸入形式,返回倒數第一個不匹配的索引 

3)replace() 替換 
        1、replace(off, cnt, s2) 將 s [off, off + cnt) 替換成 s2 
        2、replace(off, cnt, s2, off2, cnt2) 將 s [off, off + cnt) 替換成 s2 [off2, off2 + cnt2)
        3、replace(off, cnt, p) 將 s [off, off + cnt) 替換成 [p, <null>) 
        4、replace(off, cnt, p, cnt2) 將 s [off, off + cnt) 替換成 [p, p + cnt2)

        5、replace(off, cnt, n, c) 將 s [off, off + cnt) 替換成 c * n 

使用迭代器的情況: 
        6、replace(InF, InL, s2) 將 [InF, InL) 替換成 s2 
        7、replace(InF, InL, p) 將 [InF, InL) 替換成 [p, <null>) 
        8、replace(InF, InL, p, cnt) 將 [InF, InL) 替換成 [p, p + cnt) 
        9、replace(InF, InL, n, c) 將 [InF, InL) 替換成 n * c 
        10、replace(InF, InL, InF2, InL2) 將 [InF, InL) 替換成 [InF2, InL2) 

4)erase() 刪除 
        1、erase(off, cnt) 從字符串 s 中刪除 s [off, off + cnt) 
        2、erase(iter) 從字符串 s 中刪除 *iter 
        3、erase(ItF, ItL) 從字符串 s 中刪除 [ItF, ItL) 

八、取出字符串 
1)取得 C 風格字符串 
c_str() 返回常量類型的 C 風格字符串指針,copy(ptr, cnt, off = 0) 則將指定大小的字符串復制到特定指針。data() 在 Visual C++ 7.1 中僅僅調用了 c_str() 實現。 
2)取得子字符串 
substr(off, cnt) 取得 s [off, off + cnt) 的副本。  
3)復制子字符串 
copy(p, off, cnt) 將 s [off, off + cnt) 復制到 p。 


九、字符串的緩沖區管理 
字符串具有類似 std::vector 的緩沖區管理界面。  
size() 取得有效元素長度 
max_size() 取得當前內存分配器能分配的有效空間 
reserve() 為緩沖區預留空間 
capacity() 取得緩沖區的容量 
resize() 重設串的長度,可以為其指定初始化值 

  十、定義輸入迭代器的尾端 
向 istream_iterator 傳遞輸入流對象以創建輸入迭代器,輸入迭代器持有輸入流對象的指針,默認創建和讀取流失敗的情況下該指針被設置為 0。並且在實現輸入迭代器間的 operator == 相等運算時,進行持有的流對象指針的相等比較,這樣,默認創建的輸入迭代器將被用於匹配輸入流的結束。 

* 當輸入流讀取失敗,用戶執行 if, while 條件判斷時,實際上先將判斷值轉換成 void* 類型,或者根據 operator ! 運算符的返回結果,對輸入流重載 operator void* 和 operator ! 運算符,可以定義輸入流在布爾表達式中的行為,使得當流讀取失敗的情況下,輸入迭代器可以通過布爾表達式來確認,而不是顯式訪問 fail() 成員函數. 

 

轉:http://www.jb51.net/article/37410.htm

 

 

 

 

標准c字符和字符串

 


 

atof

 

語法:

 

 

  #include <stdlib.h>
  double atof( const char *str );

 

功能:將字符串str轉換成一個雙精度數值並返回結果。 參數str 必須以有效數字開頭,但是允許以“E”或“e”除外的任意非數字字符結尾。例如:

 

    x = atof( "42.0is_the_answer" );

 

x的值為42.0.

 

相關主題: atoi() and atol().

 


 

atoi

 

語法:

 

 

  #include <stdlib.h>
  int atoi( const char *str );

 

功能:將字符串str轉換成一個整數並返回結果。參數str 以數字開頭,當函數從str 中讀到非數字字符則結束轉換並將結果返回。例如,

 

    i = atoi( "512.035" );

 

i 的值為 512.

 

相關主題: atof() and atol().

 


 

atol

 

語法:

 

 

  #include <stdlib.h>
  long atol( const char *str );

 

功能:將字符串轉換成長整型數並返回結果。函數會掃描參數str字符串,跳過前面的空格字符,直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字符串結束時才結束轉換,並將結果返回。例如,

 

    x = atol( "1024.0001" );

 

x的值為1024L.

 

相關主題: atof() and atoi().

 


 

isalnum

 

語法:

 

 

  #include <ctype.h>
  int isalnum( int ch );

 

功能:如果參數是數字或字母字符,函數返回非零值,否則返回零值。

 

    char c;

 

    scanf( "%c", &c );

 

    if( isalnum(c) )

 

      printf( "You entered the alphanumeric character %c\n", c );

 

相關主題: isalpha()iscntrl()isdigit()isgraph()isprint()ispunct(), and isspace().

 


 

isalpha

 

語法:

 

 

  #include <ctype.h>
  int isalpha( int ch );

 

功能:如果參數是字母字符,函數返回非零值,否則返回零值。

 

    char c;

 

    scanf( "%c", &c );

 

    if( isalpha(c) )

 

      printf( "You entered a letter of the alphabet\n" );

 

相關主題: isalnum()iscntrl()isdigit()isgraph()isprint()ispunct(), and isspace().

 


 

iscntrl

 

語法:

 

 

  #include <ctype.h>
  int iscntrl( int ch );

 

功能:如果參數是控制字符(0和0x1F之間的字符,或者等於0x7F)函數返回非零值,否則返回零值。 

 

相關主題: isalnum()isalpha()isdigit()isgraph()isprint()ispunct(), and isspace().

 


 

isdigit

 

語法:

 

 

  #include <ctype.h>
  int isdigit( int ch );

 

功能:如果參數是0到9之間的數字字符,函數返回非零值,否則返回零值.

 

    char c;

 

    scanf( "%c", &c );

 

    if( isdigit(c) )

 

      printf( "You entered the digit %c\n", c );

 

相關主題: isalnum()isalpha()iscntrl()isgraph()isprint()ispunct(), and isspace().

 


 

isgraph

 

語法:

 

 

  #include <ctype.h>
  int isgraph( int ch );

 

功能:如果參數是除空格外的可打印字符(可見的字符),函數返回非零值,否則返回零值。

 

相關主題: isalnum()isalpha()iscntrl()isdigit()isprint()ispunct(), and isspace().

 


 

islower

 

語法:

 

 

  #include <ctype.h>
  int islower( int ch );

 

功能:如果參數是小寫字母字符,函數返回非零值,否則返回零值。

 

相關主題: isupper()

 


 

isprint

 

語法:

 

 

  #include <ctype.h>
  int isprint( int ch );

 

功能:如果參數是可打印字符(包括空格),函數返回非零值,否則返回零值。

 

相關主題: isalnum()isalpha()iscntrl()isdigit()isgraph()ispunct(), and isspace().

 


 

ispunct

 

語法:

 

 

  #include <ctype.h>
  int ispunct( int ch );

 

功能:如果參數是除字母,數字和空格外可打印字符,函數返回非零值,否則返回零值。

 

相關主題: isalnum()isalpha()iscntrl()isdigit()isgraph()isprint(), and isspace().

 


 

isspace

 

語法:

 

 

  #include <ctype.h>
  int isspace( int ch );

 

功能:如果參數是空格類字符(即:單空格,制表符,垂直制表符,滿頁符,回車符,新行符),函數返回非零值,否則返回零值。

 

相關主題: isalnum()isalpha()iscntrl()isdigit()isgraph(), and ispunct().

 


 

isupper

 

語法:

 

 

  #include <ctype.h>
  int isupper( int ch );

 

功能:如果參數是大寫字母字符,函數返回非零值,否則返回零值。

 

相關主題: tolower()

 


 

isxdigit

 

語法:

 

 

  #include <ctype.h>
  int isxdigit( int ch );

 

功能:如果參數是十六進制數字字符(即:A-F, a-f, 0-9),函數返回非零值,否則返回零值。

 

相關主題: isalnum()isalpha()iscntrl()isdigit()isgraph()ispunct(), and isspace().

 


 

memchr

 

語法:

 

 

  #include <string.h>
  void *memchr( const void *buffer, int ch, size_t count );

 

功能:函數在buffer指向的數組的count個字符的字符串里查找ch 首次出現的位置。返回一個指針,指向ch 在字符串中首次出現的位置, 如果ch沒有在字符串中找到,返回NULL。例如:

 

    char names[] = "Alan Bob Chris X Dave";

 

    if( memchr(names,'X',strlen(names)) == NULL )

 

      printf( "Didn't find an X\n" );

 

    else

 

      printf( "Found an X\n" );

 

相關主題: memcpy() and strstr().

 


 

memcmp

 

語法:

 

 

  #include <string.h>
  int memcmp( const void *buffer1, const void *buffer2, size_t count );

 

功能:函數比較buffer1 和 buffer2的前count 個字符。返回值如下:

 

Value

解釋

less than 0

buffer1 is less than buffer2

equal to 0

buffer1 is equal to buffer2

greater than 0

buffer1 is greater than buffer2

 

相關主題: memchr()memcpy(), and strcmp().

 


 

memcpy

 

語法:

 

 

  #include <string.h>
  void *memcpy( void *to, const void *from, size_t count );

 

功能:函數從from中復制count 個字符到to中,並返回to指針。 如果to 和 from 重疊,則函數行為不確定。

 

相關主題: memmove().

 


 

memmove

 

語法:

 

 

  #include <string.h>
  void *memmove( void *to, const void *from, size_t count );

 

功能: 與mencpy相同,不同的是當to 和 from 重疊,函數正常仍能工作。

 

相關主題: memcpy().

 


 

memset

 

語法:

 

 

  #include <string.h>
  void *memset( void *buffer, int ch, size_t count );

 

功能: 函數拷貝ch 到buffer 從頭開始的count 個字符里, 並返回buffer指針。 memset() 可以應用在將一段內存初始化為某個值。例如:

 

    memset( the_array, '\0', sizeof(the_array) );

 

這是將一個數組的所以分量設置成零的很便捷的方法。

 

相關主題: memcmp()memcpy(), and memmove().

 


 

strcat

 

語法:

 

 

  #include <string.h>
  char *strcat( char *str1, const char *str2 );

 

功能:函數將字符串str2 連接到str1的末端,並返回指針str1. 例如:

 

    printf( "Enter your name: " );

 

    scanf( "%s", name );

 

    title = strcat( name, " the Great" );

 

    printf( "Hello, %s\n", title );

 

相關主題: strchr()strcmp(), and strcpy().

 


 

strchr

 

語法:

 

 

  #include <string.h>
  char *strchr( const char *str, int ch );

 

功能:函數返回一個指向str 中ch 首次出現的位置,當沒有在str 中找ch到返回NULL。

 

相關主題: strpbrk()strspn()strstr(), and strtok().

 


 

strcmp

 

語法:

 

 

  #include <string.h>
  int strcmp( const char *str1, const char *str2 );

 

功能:比較字符串str1 and str2, 返回值如下:

 

返回值

解釋

less than 0

str1 is less than str2

equal to 0

str1 is equal to str2

greater than 0

str1 is greater than str2

 

例如:

 

    printf( "Enter your name: " );

 

    scanf( "%s", name );

 

    if( strcmp( name, "Mary" ) == 0 )

 

      printf( "Hello, Dr. Mary!\n" );

 

相關主題: memcmp()strchr()strcpy(), and strncmp().

 


 

strcoll

 

語法:

 

 

  #include <string.h>
  int strcoll( const char *str1, const char *str2 );

 

功能:比較字符串str1 和 str2, 很象strcmp. 但是, strcoll() 使用在目前環境中由setlocale()設定的次序進行比較。

 


 

strcpy

 

語法:

 

 

  #include <string.h>
  char *strcpy( char *to, const char *from );

 

功能:復制字符串from 中的字符到字符串to,包括空值結束符。返回值為指針to

 

相關主題: memcpy()strchr()strcmp()strncmp(), and strncpy().

 


 

strcspn

 

語法:

 

 

  #include <string.h>
  size_t strcspn( const char *str1, const char *str2 );

 

功能:函數返回str1 開頭連續n個字符都不含字符串str2內字符的字符數。

 

相關主題: strrchr()strpbrk()strstr(), and strtok().

 


 

strerror

 

語法:

 

 

  #include <string.h>
  char *strerror( int num );

 

功能:函數返回一個被定義的與某錯誤代碼相關的錯誤信息。

 


 

strlen

 

語法:

 

 

  #include <string.h>
  size_t strlen( char *str );

 

功能:函數返回字符串str 的長度( 即空值結束符之前字符數目)。

 

相關主題: memcpy()strchr()strcmp(), and strncmp().

 


 

strncat

 

語法:

 

 

  #include <string.h>
  char *strncat( char *str1, const char *str2, size_t count );

 

功能:將字符串from 中至多count個字符連接到字符串to中,追加空值結束符。返回處理完成的字符串。

 

相關主題: strcat()strnchr()strncmp(), and strncpy().

 


 

strncmp

 

語法:

 

 

  #include <string.h>
  int strncmp( const char *str1, const char *str2, size_t count );

 

功能:比較字符串str1 和 str2中至多count個字符。返回值如下:

 

返回值

解釋

less than 0

str1 is less than str2

equal to 0

str1 is equal to str2

greater than 0

str1 is greater than str2

 

如果參數中任一字符串長度小於count, 那么當比較到第一個空值結束符時,就結束處理。

 

相關主題: strcmp()strnchr(), and strncpy().

 


 

strncpy

 

語法:

 

 

  #include <string.h>
  char *strncpy( char *to, const char *from, size_t count );

 

功能:將字符串from 中至多count個字符復制到字符串to中。如果字符串from 的長度小於count,其余部分用'\0'填補。返回處理完成的字符串。

 

相關主題: memcpy()strchr()strncat(), and strncmp().

 


 

strpbrk

 

語法:

 

 

  #include <string.h>
  char *strpbrk( const char *str1, const char *str2 );

 

功能:函數返回一個指針,它指向字符串str2中任意字符在字符串str1 首次出現的位置,如果不存在返回NULL。

 

相關主題: strspn()strrchr()strstr(), and strtok().

 


 

strrchr

 

語法:

 

 

  #include <string.h>
  char *strrchr( const char *str, int ch );

 

功能:函數返回一個指針,它指向字符ch 在字符串str末次出現的位置,如果匹配失敗,返回NULL。

 

相關主題: strpbrk()strspn()strstr()strtok(),

 


 

strspn

 

語法:

 

 

  #include <string.h>
  size_t strspn( const char *str1, const char *str2 );

 

功能:函數返回字符串str1中第一個不包含於字符串str2的字符的索引。

 

相關主題: strpbrk()strrchr()strstr()strtok(),

 


 

strstr

 

語法:

 

 

  #include <string.h>
  char *strstr( const char *str1, const char *str2 );

 

功能:函數返回一個指針,它指向字符串str2 首次出現於字符串str1中的位置,如果沒有找到,返回NULL。

 

相關主題: strchr()strcspn()strpbrk()strspn()strtok()strrchr(),

 


 

strtod

 

語法:

 

 

  #include <stdlib.h>
  double strtod( const char *start, char **end );

 

功能:函數返回帶符號的字符串start所表示的浮點型數。字符串end 指向所表示的浮點型數之后的部分。如果溢出發生,返回HUGE_VAL或 -HUGE_VAL

 

相關主題: atof()

 


 

strtok

 

語法:

 

 

  #include <string.h>
  char *strtok( char *str1, const char *str2 );

 

功能:函數返回字符串str1中緊接“標記”的部分的指針, 字符串str2是作為標記的分隔符。如果分隔標記沒有找到,函數返回NULL。為了將字符串轉換成標記,第一次調用str1 指向作為標記的分隔符。之后所以的調用str1 都應為NULL。

 

例如:

 

    char str[] = "now # is the time for all # good men to come to the # aid of their country";

 

    char delims[] = "#";

 

    char *result = NULL;

 

 

 

    result = strtok( str, delims );

 

 

 

    while( result != NULL ) {

 

        printf( "result is \"%s\"\n", result );

 

         result = strtok( NULL, delims );

 

    }

 

以上代碼的運行結果是:

 

    result is "now "

 

    result is " is the time for all "

 

    result is " good men to come to the "

 

    result is " aid of their country"

 

相關主題: strchr()strcspn()strpbrk()strrchr(), and strspn().

 


 

strtol

 

語法:

 

 

  #include <stdlib.h>
  long strtol( const char *start, char **end, int base );

 

功能:函數返回帶符號的字符串start所表示的長整型數。參數base代表采用的進制方式。指針end 指向start所表示的整型數之后的部分。如果返回值無法用長整型表示,函數則返回LONG_MAXLONG_MIN. 錯誤發生時,返回零。

 

相關主題: atol().

 


 

strtoul

 

語法:

 

 

  #include <stdlib.h>
  unsigned long strtoul( const char *start, char **end, int base );

 

功能:函數基本等同 strtol(), 不同的是,它不僅可以返回長整型數,而且可以返回無符號的長整型數。

 

相關主題: strtol()

 


 

strxfrm

 

語法:

 

 

  #include <string.h>
  size_t strxfrm( char *str1, const char *str2, size_t num );

 

功能:函數將字符串str2 的前num 個字符存儲到字符串str1中。如果strcoll() 處理字符串str1 和舊的字符串str2, 返回值和strcmp()的處理結果一樣。

 

相關主題: strcmp()strcoll(),

 


 

tolower

 

語法:

 

 

  #include <ctype.h>
  int tolower( int ch );

 

功能:函數字符ch的小寫形式。

 

相關主題: toupper(),

 


 

toupper

 

語法:

 

 

  #include <ctype.h>
  int toupper( int ch );

 

功能:函數字符ch的大寫形式。

 

相關主題: tolower(),

 

轉:http://www.cnblogs.com/minotmin/p/3320699.html

 

 

 

1、字符數組的定義與初始化

字符數組的初始化,最容易理解的方式就是逐個字符賦給數組中各元素。

char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};

即把10個字符分別賦給str[0]到str[9]10個元素

如果花括號中提供的字符個數大於數組長度,則按語法錯誤處理;若小於數組長度,則只將這些字符數組中前面那些元素,其余的元素自動定為空字符(即 '\0' )。

2、字符數組與字符串

在c語言中,將字符串作為字符數組來處理。(c++中不是)

在實際應用中人們關心的是有效字符串的長度而不是字符數組的長度,例如,定義一個字符數組長度為100,而實際有效字符只有40個,為了測定字符串的實際長度,C語言規定了一個“字符串結束標志”,以字符'\0’代表。如果有一個字符串,其中第10個字符為'\0',則此字符串的有效字符為9個。也就是說,在遇到第一個字符'\0'時,表示字符串結束,由它前面的字符組成字符串。

系統對字符串常量自動加一個'\0'作為結束符。例如"C Program”共有9個字符,但在內存中占10個字節,最后一個字節'\0'是系統自動加上的。(通過sizeof()函數可驗證)

有了結束標志'\0'后,字符數組的長度就顯得不那么重要了,在程序中往往依靠檢測'\0'的位置來判定字符串是否結束,而不是根據數組的長度來決定字符串長度。當然,在定義字符數組時應估計實際字符串長度,保證數組長度始終大於字符串實際長度。(在實際字符串定義中,常常並不指定數組長度,如char str[ ])

說明:'\n’代表ASCII碼為0的字符,從ASCII碼表中可以查到ASCII碼為0的字符不是一個可以顯示的字符,而是一個“空操作符”,即它什么也不干。用它來作為字符串結束標志不會產生附加的操作或增加有效字符,只起一個供辨別的標志。

對C語言處理字符串的方法由以上的了解后,再對字符數組初始化的方法補充一種方法——即可以用字符串常量來初始化字符數組:

char str[ ]={"I am happy"};       可以省略花括號,如下所示

char str[ ]="I am happy";

注意:上述這種字符數組的整體賦值只能在字符數組初始化時使用,不能用於字符數組的賦值,字符數組的賦值只能對其元素一一賦值,下面的賦值方法是錯誤的

             char str[ ];

             str="I am happy";

不是用單個字符作為初值,而是用一個字符串(注意:字符串的兩端是用雙引號“”而不是單引號‘’括起來的)作為初值。顯然,這種方法更直觀方便。(注意:數組str的長度不是10,而是11,這點請務必記住,因為字符串常量"I am happy"的最后由系統自動加上一個'\0'

因此,上面的初始化與下面的初始化等價

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};

而不與下面的等價

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};

前者的長度是11,后者的長度是10.

說明:字符數組並不要求它的最后一個字符為'\0',甚至可以不包含'\0',向下面這樣寫是完全合法的。

char str[5]={'C','h','i','n','a'};

++++++++

可見,用兩種不同方法初始化字符數組后得到的數組長度是不同的

#include <stdio.h>

void main(void)
{
char c1[]={'I',' ','a','m',' ','h','a','p','p','y'};
char c2[]="I am happy";
int i1=sizeof(c1);
int i2=sizeof(c2);
printf("%d\n",i1);
printf("%d\n",i2);

}

結果:10   11

3、字符串的表示形式

在C語言中,可以用兩種方法表示和存放字符串:

(1)用字符數組存放一個字符串

          char str[ ]="I love China";

(2)用字符指針指向一個字符串

          char* str="I love China";

對於第二種表示方法,有人認為str是一個字符串變量,以為定義時把字符串常量"I love China"直接賦給該字符串變量,這是不對的。

C語言對字符串常量是按字符數組處理的,在內存中開辟了一個字符數組用來存放字符串常量,程序在定義字符串指針變量str時只是把字符串首地址(即存放字符串的字符數組的首地址)賦給str。

兩種表示方式的字符串輸出都用

printf("%s\n",str);

%s表示輸出一個字符串,給出字符指針變量名str(對於第一種表示方法,字符數組名即是字符數組的首地址,與第二種中的指針意義是一致的),則系統先輸出它所指向的一個字符數據,然后自動使str自動加1,使之指向下一個字符...,如此,直到遇到字符串結束標識符 " \0 "。

4、對使用字符指針變量字符數組兩種方法表示字符串的討論

雖然用字符數組和字符指針變量都能實現字符串的存儲和運算,但它們二者之間是有區別的,不應混為一談。

4.1、字符數組由若干個元素組成,每個元素放一個字符;而字符指針變量中存放的是地址(字符串/字符數組的首地址),絕不是將字符串放到字符指針變量中(是字符串首地址)

4.2、賦值方式:

         對字符數組只能對各個元素賦值,不能用以下方法對字符數組賦值

         char str[14];

         str="I love China";     (但在字符數組初始化時可以,即char str[14]="I love China";)

         而對字符指針變量,采用下面方法賦值:

          char* a;

          a="I love China";

          或者是 char* a="I love China";       都可以

4.3、對字符指針變量賦初值(初始化):

         char* a="I love China";      

等價於:

           char* a;

           a="I love China";

而對於字符數組的初始化

          char str[14]="I love China";

不能等價於:

         char str[14];

         str="I love China"; (這種不是初始化,而是賦值,而對數組這樣賦值是不對的)

4.4、如果定義了一個字符數組,那么它有確定的內存地址;而定義一個字符指針變量時,它並未指向某個確定的字符數據,並且可以多次賦值。

5、字符串處理函數

5.1

char *strcat(char *str1,const char *2 );

char *strcat(char *strDestination,const char *strSource );

功能:函數將字符串str2 連接到str1的末端,並返回指針str1

注:連接前兩個字符串的后面都有一個' \0 ',連接時將字符串1后面的 ' \0 ‘去掉,只在新串最后保留一個 ' \0 ‘

5.2

char *strcpy(char *str1,const char *2 );

char *strcpy(char *strDestination,const char *strSource );

功能:復制字符串strSource中的字符到字符串strDestination,包括空值結束符。返回值為指針strDestination。

注:1、“字符數組1”必須寫成數組名形式,“字符串2"可以是字符數組名,也可以是一個字符串常量

        2、復制時連同字符串后面的 ' \0 ' 一起復制到數組1中

        3、不能用賦值語句直接將一個字符串常量或者字符數組直接賦給一個字符數組(同普通變量數組是一樣的),而只能用strcpy函數處理。

        4、可以用strcpy函數將字符串2中的前若干個字符復制到字符數組1中去。

 
 
轉:http://www.cnblogs.com/lidabo/archive/2012/08/28/2660048.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM