1.strlen

得到字符串长度,不包括空字符

  1. #include<stdio.h> 
  2. void fit(char *string,int n); 
  3.  
  4. int main(void){ 
  5.     char mesg[] = "Hold on to your hats,hakers"
  6.  
  7.     puts(mesg); 
  8.     fit(mesg,7); 
  9.     puts(mesg); 
  10.     puts(mesg+8); 
  11.     return 0; 
  12.  
  13. void fit(char *string,int n){ 
  14.     if(strlen(string)>n){//当字符串长度大于n时,我们可以截断该字符串,截断方法是在想截断的位置插入空字符 
  15.         string[n] = '\0'
  16.     } 

2.strcat

将第二个参数添加到第一个参数末尾,第二个参数不变,返回第一个参数

不检查大小会发生溢出

第一个参数原先的空字符将被覆盖

 

  1. #include<stdio.h> 
  2. #define SIZE 80 
  3.  
  4. int main(void){ 
  5.     char flower[SIZE]; 
  6.     char *add = "s smell like old shoe"
  7.  
  8.     puts("Enter flower:"); 
  9.     gets(flower); 
  10.     strcat(flower,add);//将第二个参数添加到第一个参数结尾 
  11.     puts(flower); 
  12.     puts(add);//第二个参数不变 
  13.  
  14.     return 0; 

 

3.strncat

第三个参数指定添加的字符数,注意要计算空字符!

 

  1. #include<stdio.h> 
  2. #include<string.h> 
  3. #define SIZE 30 
  4. #define BUGSIZE 13 
  5.  
  6. int main(void){ 
  7.     char flower[SIZE]; 
  8.     char addon[] = "s smell like old shoe"
  9.     char bug[BUGSIZE]; 
  10.     int available; 
  11.  
  12.     puts("Enter flower:"); 
  13.     gets(flower); 
  14.     if((strlen(flower)+strlen(addon)+1) <= SIZE){//判断空间是否可以容纳! 
  15.         strcat(flower,addon); 
  16.     } 
  17.     else
  18.         puts("No spaces of flower!"); 
  19.     } 
  20.     puts(flower); 
  21.     puts("Enter bug"); 
  22.     gets(bug); 
  23.     available = BUGSIZE - strlen(bug) - 1;//计算字符串还可以容纳多少空间 
  24.     strncat(bug,addon,available); 
  25.     puts(bug); 
  26.  
  27.     return 0; 

4.strcmp

字符串本质上是指针,因此比较字符串如果使用比较运算符,并不检查两个字符串是否相等,而是检查这两个字符串的地址是否一样,这是不可能一样的。我们需要一个比较字符串内容而不是字符串地址的函数

 

  1. #include<stdio.h> 
  2. #include<string.h> 
  3. #define ANSWER "Grant" 
  4. #define MAX 40 
  5.  
  6. int main(void){ 
  7.     char try[MAX]; 
  8.      
  9.     puts("Who is buried in Grant's tomb?"); 
  10.     gets(try); 
  11.     while(strcmp(try,ANSWER)){ 
  12.         puts("try again"); 
  13.         gets(try);//空间不会被耗尽,因为gets每次都是从空间的开头开始写起 
  14.     } 
  15.  
  16.     return 0; 

相等返回0,第一个字符先于第二个返回-1,第一个字符后于第二个返回1。比较根据ASCII码,大写排在小写前面

5.strncmp

第三个参数用来指定比较的字符数

主要应用于搜索“指定字符”开头的字符串

 

  1. #include<stdio.h> 
  2. #include<string.h> 
  3. #define LENGTH 5 
  4.  
  5. int main(void){ 
  6.     char *string[LENGTH] = {"sunshine","flower","sunboy","grass","morning"}; 
  7.     char *search = "sun"
  8.     int count = 0; 
  9.     int index; 
  10.  
  11.  
  12.     for(index=0;index<LENGTH;index++){ 
  13.         if(strncmp(search,string[index],3) == 0){ 
  14.             printf("%s\n",string[index]); 
  15.             count++; 
  16.         } 
  17.     } 
  18.     printf("%d",count); 
  19.     return 0; 
  20.      

6.strcpy

 

  1. #include<stdio.h> 
  2. #include<string.h> 
  3. #define LIM 5 
  4. #define SIZE 40 
  5.  
  6. int main(void){ 
  7.     char qwords[LIM][SIZE]; 
  8.     char temp[SIZE]; 
  9.     int i = 0; 
  10.  
  11.     printf("Enter %d words\n",SIZE); 
  12.     while(i<LIM && gets(temp)){ 
  13.         if(temp[0] != 'q'){//也可以使用strncmp(temp,"q",1)来判断 
  14.             printf("%s doesn't begin with q!\n",temp); 
  15.         } 
  16.         else
  17.             strcpy(qwords[i],temp); 
  18.             i++; 
  19.         } 
  20.     } 
  21.     puts("Here are the words accepted."); 
  22.     for(i=0;i<LIM;i++){ 
  23.         puts(qwords[i]); 
  24.     } 
  25.     return 0; 

strcpy返回第一个参数的地址,且第一个参数位置不一定必须是数组的起始位置

 

  1. #include<stdio.h> 
  2. #include<string.h> 
  3. #define WORDS "beast" 
  4. #define SIZE 40 
  5.  
  6. int main(void){ 
  7.     char *orig = WORDS; 
  8.     char copy[SIZE] = "Be the best that you can be."
  9.     char *ps; 
  10.  
  11.     puts(orig); 
  12.     puts(copy); 
  13.     ps = strcpy(copy+7,orig);//拷贝到第七个位置 
  14.     puts(copy); 
  15.     puts(ps); 
  16.  
  17.     return 0; 

7.strncpy

第三个参数指明最大可复制的字符数,有时候需要我们自己再将标识结尾的空字符添加到字符串中!

 

  1. #include<string.h> 
  2. #define LIM 5 
  3. #define TARGSIZE 7 
  4. #define SIZE 40 
  5.   
  6. int main(void){ 
  7.     char qwords[LIM][TARGSIZE]; 
  8.     char temp[SIZE]; 
  9.     int i = 0; 
  10.  
  11.     while(i<LIM && gets(temp)){ 
  12.         if(temp[0] != 'q'){ 
  13.             printf("try again!"); 
  14.         } 
  15.         else
  16.             strncpy(qwords[i],temp,TARGSIZE-1);//最多能复制6个 
  17.             qwords[i][TARGSIZE-1] = '\0';//将最后的空字符添加进去 
  18.             i++; 
  19.         } 
  20.     } 
  21.     puts("Here is the inputs"); 
  22.     for(i=0;i<LIM;i++){ 
  23.         puts(qwords[i]); 
  24.     } 
  25.     return 0; 

8.sprintf

与printf相似,只是它写道字符串而不是屏幕上。可以用于合成。

 

  1. #include<stdio.h> 
  2. #define MAX 20 
  3.   
  4. int main(void){ 
  5.     char first[MAX]; 
  6.     char last[MAX]; 
  7.     char formal[MAX*2+10]; 
  8.     double prize; 
  9.  
  10.     puts("Enter your firstname:"); 
  11.     gets(first); 
  12.     puts("Enter your lastname:"); 
  13.     gets(last); 
  14.     puts("Enter your prize money"); 
  15.     scanf("%lf",&prize); 
  16.     sprintf(formal,"%s,%-19s:$%6.2f\n",first,last,prize);//组合在一起了! 
  17.     puts(formal); 
  18.  
  19.     return 0; 
  20.  

9.常用总结