任务二----<string.h>8个函数的自实现

1,strlen

统计字符串的长度但不包括'\0'

int my_strlen(char s[])
{
  int i,len=0;
  for(i=0;s[i]!='\0';i++)
     len++;
  return len;
}

2,strcmp

两个字符串比较大小s1大于等于小于s2分别输出1,0,-1

int my_strcmp(char s1[],char s2[])
{
  int i;
  for(i=0;;i++)
   {  if(s1[i]>s2[i])
         return 1;
      if(s1[i]<s2[i])
         return -1;
      if(s1[i]!='\0'&&s2[i]=='\0')
         return 1;
	  if(s1[i]=='\0'&&s2[i]!='\0')
         return -1;
      if(s1[i]=='\0'&&s2[i]=='\0')
         return 0;
   }
}

3,strcpy

将字符串s2的内容复制给s1,s1的长度要大于等于s2;

void my_strcpy(char *p1,char *p2)
{
  
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  *p1='\0';    
}

样例

#include<stdio.h>
void my_strcpy(char *p1,char *p2)
{
  
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  *p1='\0';    
}


int main() 

{
   
   char s1[1000],s2[1000],*p1=s1,*p2=s2;
   gets(s1);
   gets(s2);
   my_strcpy(p1,p2);
   printf("%s",s1); 
     
   return 0;
}
/*
样例一 
输入	
hello!
hi
输出
hi
*/

4,strcat

用来连接字符串

void strcat(char *p1,char *p2)
{
  int len;
  len=strlen(p1);
  p1=p1+len;
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  p1='\0';   
}

样例(存在部分是可以正确执行部分不能正确执行的问题)

#include<stdio.h>
#include<string.h>
void strcat(char *p1,char *p2)
{
  int len;
  len=strlen(p1);
  p1=p1+len;
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  p1='\0';   
}


int main() 

{
   
   char s1[1000],s2[1000],*p1=s1,*p2=s2;
   gets(s1);
   gets(s2);
   strcat(p1,p2);
   printf("%s",s1); 
     
   return 0;
}
/*
样例一 
输入	
hello!
hi
输出
hello!hi?b
样例二 
输入	
hello
hi
输出
hellohi
*/

正确实现




void my_strcpy(char *p, char *q)
{
    while (*p!='\0')
	    p++;
    
    while (*p++ = *q++);
}

样例

#include<stdio.h>


void my_strcpy(char *p, char *q)
{
    while (*p!='\0')
	    p++;
    
    while (*p++ = *q++);
}

int main()
{
    char s1[100];
    char s2[100];
    gets(s1);
    gets(s2);
    my_strcpy(s1,s2);
    printf("%s",s1);

    return 0;
}
/*
样例一 
输入	
hello!
hi
输出
hello!hi
样例二 
输入	
hello
hi
输出
hellohi
*/

5,strchr

C语言strchr函数

char *strchr(const char *str, int c)

功能:在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。

返回值:返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。

#include <stdio.h>
#define M 100
char *search(char *, char);
int main(void)
{ char str[M],ch,*p;
printf("请输入一个字符串:");
gets(str);
printf("请输入要查找的字符:");
ch=getchar();
p=search(str,ch);
puts(p);
return 0;
}
char *search(char *s, char c)
{   while(*s)//*s=='\0'结束 
	{
	if(*s==c) return s;
	s++;
	}
	return NULL;
}

结果

请输入一个字符串:hello
请输入要查找的字符:l
llo

6,strstr

char *my_strstr(char *s1, char *s2)

功能:检索字串在字符串中首次出现的位置并返回

返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL

举例

#include <stdio.h>
#define M 100
 char * my_strstr(char *str1, char *str2)
{
    
    while (str1 != '\0')
    {
        char *p = str1;
        char *q = str2;
        char * res = NULL;
        if (*p == *q)
        {
            res = p;
            while (*p && *q && *p++ == *q++)
            {
                ;
            }
            if (*q == '\0')
                return res;
        }
        str1++;
    }
    return NULL;
}

int main(void)
{ char str[M],ch[M],*p;
printf("请输入一个字符串:");
gets(str);
printf("请输入要查找的字符串:");
gets(ch);
p= my_strstr(str,ch);
puts(p);
return 0;
}

结果

请输入一个字符串:hello world
请输入要查找的字符串:wo
world

7,strncmp

int strncmp(const char *str1, const char *str2, int n)

与strcmp相似,不过比较范围缩小到前n个字符

int my_strncmp(char s1[],char s2[],int n)
{
  int i;
  for(i=0;i<n;i++)
   {  if(s1[i]>s2[i])
         return 1;
      if(s1[i]<s2[i])
         return -1; 
   }
   return 0;
}

8,strncpy

char *strncpy(char *destinin, char *source, int maxlen)

与strcpy相似,不过比较范围缩小到前n个字符

void my_strcpy(char *p1,char *p2,int n)
{
  int i;
  for(i=0;i<n;p1++,p2++,i++)
  {
  *p1=*p2;
  }
  *p1='\0';    
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值