直接上代码:
一、字符串连接:
1. //src字符串连接到dest后面
char * strcat(char * dest, const char * src)
{
char *temp = test;
while(*dest)
{
dest++;
}
while((*dest++ = *src++) != '\0');
return test;
}
2. //限定最多连接n个 count 个字符
char * strncat(char *dest, const char *src, size_t count)
{
char *temp = dest;
//找到字符串末尾
while(*dest)
{
dest++;
}
while(count-- >0)
{
if(*src)
{
*dest++ = *src++;
}
else{
break;
}
}
*dest = '\0';
return temp;
}
二、子串匹配
//未作优化
int matchSubString(char *s,char *t)
{
int length1 = 0;
int length2 = 0;
char *ps = s;
char *pt = t;
int i,j;
i = 0;
j = 0;
//计算字符串长度
while(*ps++)
{
length1++;
}
while(*pt++)
{
length2++;
}
printf("length1 = %d", length1);
printf("length2 = %d",length2);
//循环判断字符匹配
while((i < length1)&&(j < length2))
{
if(s[i] == t[j])
{
i++;
j++;
}
else
{
i = i - j +1;//i指针回溯,i 和j 增量一样,相减后回到初始位置,在往前推进一个字符。
j = 0;
}
}
//判断结果
if(j >= length2)
{
return i - j;
}
else
{
return -1;
}
}
三、 字符串拷贝
1. src ----->dest
char * strcpy(char * dest,const char *src)
{
char *temp = dest;
if(NULL == dest)
{
return NULL;
}
while(*src )
{
*dest++ = *src++;
}
*dest = '\0';
return temp;
}
2. src----->dest,最多拷贝count 个字符
char * strncpy(char * dest,const char *src,size_t count)
{
char * temp = dest;
if(count <= 0)
{
*dest = '\0';
return dest;
}
while(count --)
{
if(*src)
{
*dest++ = *src++;
}
else
{
break;
}
}
*dest ='\0';
return temp;
}
四、比较n个字符 ,返回第一个不一样的字符的ascii码差值,相同返回0
int strnicmp(const char *s1, const char *s2, size_t len)
{
unsigned char c1;
unsigned char c2;
if(len <=0)
{
puts("param error");
return 0;
}
while (len--)
{
c1 = *s1;
c2 = *s2;
if(!c1 || !c2)//只要有一个字符为空就结束循环
{
break;
}
if(c1 == c2)
{
s1++;
s2++;
}else
{
break;
}
}
return c1 - c2;
}