Chinaunix首页 | 论坛 | 博客
  • 博客访问: 122015
  • 博文数量: 32
  • 博客积分: 506
  • 博客等级: 下士
  • 技术积分: 257
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-11 11:06
文章分类

全部博文(32)

文章存档

2012年(32)

分类: C/C++

2012-10-23 22:37:12

1、空串和空白串
     长度为零的串称为空串Empty String),它不包含任何字符。
   
 仅由一个或多个空格组成的串称为空白串Blank String)。
 
注意:
   
 
空串和空白串的不同。
   
 【例】″ ″″″分别表示长度为1的空白串和长度为0的空串。

2,串的基本函数运算的实现:

1)求串长strlen

实现方法a: 不使用中间变量求const字符串长度(常见面试题)

点击(此处)折叠或打开

  1. int strlen(const char *str)
  2. {
  3.     if((str == NULL) || (*str ==\0’))
  4.     {
  5.         return 0;
  6.     }
  7.     else
  8.     {
  9.         return strlen(str+1)+1;
  10.     }
  11. }

实现方法b:比较容易想到的方法:

点击(此处)折叠或打开

  1. int strlen(const char *str)
  2. {
  3.     assert(str != NULL);
  4.     int len;
  5.     while(*str++ != '\0')
  6.     {
  7.         len++;
  8.     }
  9.     return len;
  10. }

实现方法c:microsoft newbi实现法:

点击(此处)折叠或打开

  1. size_t __cdecl strlen(const char *str)
  2. {
  3.     const char *eos = str;
  4.     while(*eos++);
  5.     return (eos-str-1);
  6. }

(2)串复制 strcpy

点击(此处)折叠或打开

  1. char *strcpy(char *strDest,const char *strScr)
  2. {
  3.     char *address = strDest;
  4.     assert((strDest != NULL) && (strScr != NULL));
  5.    
  6.     while((*strDest++ = *strScr++) != '\0'); //该句可以完成字符串尾'\0'的copy
  7.     return address;

  8. }   

其中:while((*strDest++ = *strScr++) != '\0'); 可以做如下替换:

点击(此处)折叠或打开

  1. while(*strScr != '\0')
  2. {
  3.     *strDest++ = *strScr++;
  4. }

  5. *strDest = '\0'; //别忘要补上\0

3,串比较strcmp


点击(此处)折叠或打开

  1. int strcmp(const char *str1,const char *str2)
  2. {
  3.     assert((str1 != NULL) && (str2 != Null));
  4.     while((str1 != '\0') && (str2 != '\0') && (*str1 == str2))
  5.     {
  6.         str1++;
  7.         str2++;
  8.     }
  9.     return (*str - *str2);
  10. }

 令一种实现方法:

点击(此处)折叠或打开

  1. int __cdecl strcmp(const char *pStr1,const char *pStr2)
  2. {
  3.     if((pStr1 == NULL) || (pStr2 == NULL))
  4.     {
  5.         return 0;
  6.     }
  7.     int ret;
  8.     while(!(ret = *(unsigned char *)pStr1 - *(unsigned char *)pStr2) && *pStr2)
  9.     {
  10.         ++pStr1;
  11.         ++pStr2;
  12.     }
  13.     if(ret < 0)
  14.     {
  15.         return -1;
  16.     }
  17.     else if(ret > 0)
  18.     {
  19.         return 1;
  20.     }
  21. }

4,串连接 strcat

char *strcat(char *to,char *from);//将from串复制到to串的末尾,并返回to串开始处的指针

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0'),dest成为新的字符串,并添加'\0',src不变。  
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。   
        返回指向dest的指针。


 

点击(此处)折叠或打开

  1. char *strcat(char *dest,const char *scr)
  2. {
  3.     char *address = dest;

  4.     if((dest == NULL) || (scr == NULL))
  5.     {
  6.         return NULL;
  7.     }
  8.    
  9.     while(*dest)
  10.     {
  11.         dest++;
  12.     }
  13.     while(*dest++ = *scr++);   //该句可以把最后一个结束字符'\0'可以copy过去
  14.     return addess;
  15. }

5 字符定位strchr
    char *strchr(char *s,char c);//找c在字符串s中第一次出现的位置,若找到,则返回该位置,否则返回NULL


 

点击(此处)折叠或打开

  1. char *strchr(char *str,char ch)
  2. {
  3.     assert(srt != NULL);
  4.     
  5.     while(*str != '\0')
  6.     {
  7.         if(*str == ch)
  8.         {
  9.             return str;
  10.         }
  11.         ++str;
  12.     }
  13.     return NULL;
  14. }



 




 

阅读(1180) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~