字符串操作函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++;