1、空串和空白串
长度为零的串称为空串(Empty String),它不包含任何字符。
仅由一个或多个空格组成的串称为空白串(Blank String)。
注意:
空串和空白串的不同。
【例】″ ″和″″分别表示长度为1的空白串和长度为0的空串。
2,串的基本函数运算的实现:
(1)求串长strlen:
实现方法a: 不使用中间变量求const字符串长度(常见面试题)
- int strlen(const char *str)
- {
- if((str == NULL) || (*str == ‘\0’))
- {
- return 0;
- }
- else
- {
- return strlen(str+1)+1;
- }
- }
实现方法b:比较容易想到的方法:
- int strlen(const char *str)
- {
- assert(str != NULL);
- int len;
- while(*str++ != '\0')
- {
- len++;
- }
- return len;
- }
实现方法c:microsoft newbi实现法:
- size_t __cdecl strlen(const char *str)
- {
- const char *eos = str;
- while(*eos++);
- return (eos-str-1);
- }
(2)串复制 strcpy
- char *strcpy(char *strDest,const char *strScr)
- {
- char *address = strDest;
- assert((strDest != NULL) && (strScr != NULL));
-
- while((*strDest++ = *strScr++) != '\0'); //该句可以完成字符串尾'\0'的copy
- return address;
- }
其中:while((*strDest++ = *strScr++) != '\0'); 可以做如下替换:
- while(*strScr != '\0')
- {
- *strDest++ = *strScr++;
- }
- *strDest = '\0'; //别忘要补上\0
3,串比较strcmp
- int strcmp(const char *str1,const char *str2)
- {
- assert((str1 != NULL) && (str2 != Null));
- while((str1 != '\0') && (str2 != '\0') && (*str1 == str2))
- {
- str1++;
- str2++;
- }
- return (*str - *str2);
- }
令一种实现方法:
- int __cdecl strcmp(const char *pStr1,const char *pStr2)
- {
- if((pStr1 == NULL) || (pStr2 == NULL))
- {
- return 0;
- }
- int ret;
- while(!(ret = *(unsigned char *)pStr1 - *(unsigned char *)pStr2) && *pStr2)
- {
- ++pStr1;
- ++pStr2;
- }
- if(ret < 0)
- {
- return -1;
- }
- else if(ret > 0)
- {
- return 1;
- }
- }
4,串连接 strcat
char *strcat(char *to,char *from);//将from串复制到to串的末尾,并返回to串开始处的指针
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0'),dest成为新的字符串,并添加'\0',src不变。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
- char *strcat(char *dest,const char *scr)
- {
- char *address = dest;
- if((dest == NULL) || (scr == NULL))
- {
- return NULL;
- }
-
- while(*dest)
- {
- dest++;
- }
- while(*dest++ = *scr++); //该句可以把最后一个结束字符'\0'可以copy过去
- return addess;
- }
5 字符定位strchr
char *strchr(char *s,char c);//找c在字符串s中第一次出现的位置,若找到,则返回该位置,否则返回NULL
- char *strchr(char *str,char ch)
- {
- assert(srt != NULL);
-
- while(*str != '\0')
- {
- if(*str == ch)
- {
- return str;
- }
- ++str;
- }
- return NULL;
- }
阅读(1180) | 评论(0) | 转发(0) |