1、strcat
char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数
{
char * address = strDest; //该语句若放在assert之后,编译出错
assert((strDest != NULL) && (strScr != NULL)); //对源地址和目的地址加非0断言
while(*strDest) //是while(*strDest!='\0')的简化形式
{ //若使用while(*strDest++),则会出错,因为++是不受循环
strDest++; //约束的。所以要在循环体内++;因为要是*strDest最后指
} //向该字符串的结束标志’\0’。
while(*strDest++ = *strScr++) //是while((*strDest++ = *strScr++)!='\0')的简化形式
{
NULL; //该循环条件内可以用++,
} //此处可以加语句*strDest='\0';有无必要?
return address; //为了实现链式操作,将目的地址返回
}
2、strcmp
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0;
while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return(ret);
}
int strcmp(const char *dest, const char *source)
{
assert((NULL != dest) && (NULL != source));
while (*dest && *source && (*dest == *source))
{
dest ++;
source ++;
}
return *dest - *source;
/*如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。*/
}
3、strcpy
char *strcpy(char *strDestination,const char *strSource)
{
assert(strDestination!=NULL && strSource!=NULL);
char *strD=strDestination;
while ((*strD++=*strSource++)!='\0');
return strDestination;
}
char *strncpy(char *dest, const char *src, size_t count)
{
char *tmp = dest;
assert(src!=NULL && dest!=NULL);
while (count) {
if ((*tmp = *src) != 0)
src++;
tmp++;
count--;
}
return dest;
}
5、strrchr
char *
strrchr (const char *s, int c)
{
register const char *found, *p;
c = (unsigned char) c;
/* Since strchr is fast, we use it rather than the obvious loop. */
if (c == '\0')
return strchr (s, '\0');
found = NULL;
while ((p = strchr (s, c)) != NULL)
{
found = p;
s = p + 1;
}
return (char *) found;
}
6、字符串转换为整型:
int atoi(char * str){
int i = 0;
char *tmp = str;
char c;
while(c=*str++){
if(c>='0' && c<='9'){
i=i*10+(c-'0');
}
else{
return -1;
}
}
return i;
}
7、strstr
#include<stdlib.h>
#include<stdio.h>
char *mystrstr(const char *s1,const char *s2){
int n;
if(*s2){
while(*s1){
for(n=0;*(s1+n)==*(s2+n);n++){
if(!*(s2+n+1)){
return (char *)s1;
}
}
s1++;
}
return NULL;
}
else
return (char *)s1;
}
void main(){
char *t=mystrstr("adcacde","cd");
printf("%s\n",t);
}
int strstr(char *string,char *substring)
{
int len1=strlen(string);
int len2=strlen(substring);
for (int i=0; i<=len1-len2; i++) //复杂度为O(m*n)
{
for (int j=0; j<len2; j++)
{
if (string[i+j]!=substring[j])
break;
if (j==len2-1)
return 1;
}
}
return 0;
}