字符串操作函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字符串操作函数及内存操作函数实现

1. 求字符串长度(不含\0)-----------------------------------------------------------------------------

int strlen(const char *str)

{

int len = 0;

assert(str != NULL);

while(*str++)

len++;

return len;

}

2. 字符串大小比较------------------------------------------------------------------------------------------- int strcmp (const char *str1,const char *str2)

{

int len = 0;

assert((str1 != '/0') && (str2 != '/0'));

while(*str1 && *str2 && (*str1 == *str2))

{

str1++;

str2++;

}

return *str1-*str2;

}

3. (1)字符串拼接------------------------------------------------------------------------------------------------ char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数{

char * address = strDest; //该语句若放在assert之后,编译出错

assert((strDest != NULL) && (strScr != NULL)); //对源地址和目的地址加非0断言

//是while(*strDest!=’/0’)的简化形式.若使用while(*strDest++),则会出错,因为++是不受循环约束的。所以要在循环体内++;因为要是*strDest最后指向该字符串的结束标志’/0’while(*strDest)

strDest++; // 移到末尾

while(*strDest++ = *strScr++) //该循环条件内可以用++,

NULL;

*strDest=’/0 ‘; //此处可以加语句*strDest=’/0’;有无必要?

return address; //为了实现链式操作,将目的地址返回

}

3. (2)拼接count个字符----------------------------------------------------------------------------------- char * strncat (char * dst,const char * src, size_t count)

{

char * tmp = dst;

while( *dst )

dst ++;

while( count-- ) // 先返回,后自增.count到1,则count个

if( !( *dst++ = *src++ ) )

return tmp; // 已经发现'\0',直接返回,不要再加'\0'

*dst = '\0';

return tmp;

}

4. (1)字符串复制,不考虑溢出------------------------------------------------------------------------------- char *strcpy(char *strDest, const char *strScr)

{

char *address=strDest;

assert((strDest != NULL) && (strScr != NULL));

while(*strScr)

*strDest++ = *strScr++;

*strDest = '\0';

return address;

}

还有strcpy_s(char *desr,int destsize,const char* src)

4. (2)复制count个字符------------------------------------------------------------------------------------ char * strncpy(char * dst, const char * src, size_t count)

{

char * tmp = dst;

while( count && (*dst++ = *src++) )

count --;

if( !count ) // 复制了count个,加上'\0'

*dst = '\0';

else{

while( --count ) // 在遇到'\0'且未复制够count个字符,补上'\0'

*dst++ = '\0';

}

return tmp;

}

5. 在字符串中查找某个字符,'\0'也可以找--------------------------------------------------------------- char * strchr (const char * string,int ch)

{ // while( *string && *string++ != (char)ch ) // == 时还自增,这是不对的.

while (*string && *string != (char)ch)

string++;

if(*string == (char)ch)

return (char *)string;

return NULL;

}

6. 在字符串中查找子串------------------------------------------------------------------------------------ char * strstr (const char * str1, const char * str2)

{

char * index = (char *)str1;

char *s1,*s2;

if( !*str2)

return (char *)str1; // 要查找的为空,直接返回.

while( *index )

{

s1 = index;

s2 = (char *)str2;

while( *s1 && *s2 && \

!(*(unsigned char *)s1-*(unsigned char *)s2))

s1++,s2++;

相关文档
最新文档