字符串函数和内存操作函数

(一)字符串函数

(二)

(一)字符串函数

(1)strlen:

1)字符串以\0作为结束的标志。strlen统计的是\0前面的出现的字符个数(不包含\0)

2)参数指向的字符串必须以“\0"作为结束

char arr[]={'a','b','c'};strlen输出的是随机值

3)函数的返回值为size_t,为无符号整型

if(strlen("abc")-strlen("abcd")>0)//3-4=-1变成无符号整型为整数
  {
   printf("hehe");
  }
else printf("haha");

 4)自我实现

my_strlen(char*str)
{
 int count=0;
 while(str!='\0')
 {
  count++;
  str++;
 }
 return count;
}

(2)strcpy(把第二个字符串复制到第一个上面)

int main()
{
  char arr1[]="abcdefg";
  char arr2[]="nit";
  strcpy(arr1,arr2);//得到nit\0efg
}

     自我实现:

char* my_strcpy(char*dest,const char*src)
{
 assert(dest!=NULL);
 assert(src!=NULL);
 char*src=dest;
 //拷贝src指向的字符串到dest指向的空间包含\0

while(*dest++=*src++)
{
 ;
}
//返回目的空间的起始地址
return ret;
}

(3)strcat (连接俩个字符串)

1)源字符串必须以”\0"结束。

2)目标空间必须足够的大,必须能够容得下源字符串的内容

3)目标空间必须可以修改

my_stract(char*dest,const char*src)
{
 char*ret=dest;
 assret(dest&&src);
 1.找到目的字符串的\0
 while(*dest!='\0')
{
 *dest++;
}
 2.找到之后再追加
while(*dest++=*src++)
{
 ;
}
return ret;
}

(4)strcmp  (str1,str2)//比较

如果字符串1小于字符串2返回小于0的数字

int main()
{
 char*p1="abc";
 char*p2="qbc";
if(strcmp(p1,p2)>0)
 {
  printf("p1>p2");
 }
if(strcmp(p1,p2)<0)
 {
  printf("p1<p2");
 }
if(strcmp(p1,p2)=0)
 {
  printf("p1=p2");
 }
}


自我实现:

int my_stecmp(const char*str1,const char*str2)
{
 assert(str1&&str2);
 //比较
 while(*str1==*str2)
 {
  if(*str1=='\0')
   { 
   return 0;
   }
  *str1++;
  *str2++;
 }
 if(*str1>*str2)
  return 1;
else if(*str1<*str2)
 return -1;//return(*str1-*str2);
}

(5)strncpy //可以限制长度的strcpy

int main()
{
 char arr1[10]="abcdef";
 char arr2[]="hello bit";
 strncpy(arr1,arr2,4);//得到helled
}

拷贝num个字符从源字符串到目标空间。如果源字符串的长度小于num,则拷贝完原来的字符串后,在目标的后面加0,直到num个 

 (6)strncat//可以限制长度的strcat

int main()
{
  char arr1[30]="hello\0XXXXXX";
  char arr2[]="world";
  strncat(arr1,arr2,8);
}helloworld\0

(7)strstr//查找字符串

int main()
{
 char*p1="abcdef";
 char*p2="def";
 char*ret=strstr(p1,p2);//接收返回来的地址

 if(ret==NULL)
  {
    printf("子串不存在");
  }

 else
 {
   printf("%s",ret);
 }
}
char* my_strstr(const char*p1,const char*p2)
{
 assert(p1!=NULL);
 assert(p2!=NULL);
 char*s1=p1;
 char*s2=p2;
 char*cur=p1;

 if(*p2=='\0')
  return p1;

 while(*cur)
 {
   s1=cur;
   s2=p2;

   while((*p1==*p2)&&(*p1!='\0')&&(*p2!='\0'))
   { 
     p1++;
     p2++;
   }
  if(*p2!='\0')
  {
   return cur;
  }
   cur++;
} 
} 

(8)strtok//把一个字符串分割成各个段

char*strtok(char*str,const char*stp) 

Guess you like

Origin blog.csdn.net/m0_63203388/article/details/121772501