代码改变世界

库函数strlen、strcpy、strcat、strtr的实现

2016-03-21 20:23  Keiven_LY  阅读(752)  评论(0编辑  收藏  举报

1、题目描述:实现一个函数,将字符串str2复制给字符串str1

方法一:使用库函数strcpy

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char strSrc[]="Hello Word!";
    char strDest[20];

    strcpy(strDest,strSrc);

    printf("strDest=%s\n",strDest);
    system("pause");
    return 0;
}

方法二:不允许使用库函数

#include<stdio.h>
#include<stdlib.h>

char *strcpy_new(char *strDest,const char *strSrc)  //实现字符串strSrc到strDest的复制功能
{
    if((strDest==NULL)||(strSrc==NULL))   //判断参数strDest和strSrc的有效性
    {
        return NULL;
    }

    while((*strDest++=*strSrc++)!='\0');

    return strDest;  //返回字符串strDest的首地址
}

int main()
{
    char strSrc[]="Hello Word!";
    char strDest[20];

    strcpy_new(strDest,strSrc);

    printf("strDest=%s\n",strDest);
    system("pause");
    return 0;
}

2、题目描述:实现一个函数,求字符串的长度

方法一:使用库函数strlen

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char strSrc[]="Hello World!";
    printf("Length of strSrc is: %d\n",strlen(strSrc));
    system("pause");
    return 0;
}

方法二:不允许使用库函数

#include<stdio.h>
#include<stdlib.h>

int strlen_new(const char *strSrc)  //实现字符串strSrc到strDest的复制功能
{
    int len=0;
    if(strSrc==NULL)  //判断参数strDest和strSrc的有效性
    {
        return 0;
    }
    else
    {
        while(*strSrc++!='\0')
            len++;
        return len;
    }
}

int main()
{
    char strSrc[]="Hello World!";
    printf("Length of strSrc is: %d\n",strlen_new(strSrc));
    system("pause");
    return 0;
}

3、题目描述:实现一个函数,将两个字符串相连接

方法一:使用库函数strcat

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>

int main()
{
    char *str1="Hello";
    char *str2=" World!";
    char *str3=NULL;

    str3=(char *)malloc(strlen(str1)+strlen(str2)+1); //加1是因为给字符串最后的结束符'\0'预留空间内存
    str3[0]='\0';
    strcat(str3,str1);
    strcat(str3,str2);
    printf("%s\n",str3);
    free(str3);
    str3=NULL;
    system("pause");
    return 0;
}

方法二:不允许使用库函数

#include <stdio.h> 
#include <stdlib.h> 

char *mystrcat(char *dest, char *strSrc)
{
    char *temp;
    temp=dest;  //保存目的字符串的首地址,作为返回值

    while(*dest++);
    dest--;    //此时dest指向字符串结束符              
    while(*dest++=*strSrc++);//循环复制
    return temp;

}

int main()
{
    char *str1="Hello";
    char *str2=" World!";
    char *str3=NULL;

    str3=(char *)malloc(strlen(str1)+strlen(str2)+1); //加1是因为给字符串最后的结束符'\0'预留空间内存
    *str3='\0';  //为把目标字符串置为空,将结束符放在开头
    mystrcat(mystrcat(str3,str1),str2);
    printf("%s\n",str3);
    free(str3);
    str3=NULL;
    system("pause");
    return 0;
}

4、题目描述:实现库函数strstr的功能

库函数strstr的函数原型是:char *strstr(char *str1,char *str2),

其中: str1: 被查找目标  str2: 要查找对象

该函数返回str2第一次在str1中的位置的指针,如果没有找到,返回NULL

方法一:使用库函数strstr

#include <iostream>   
#include <stdlib.h>   
using namespace std; 
int main()  
{  
    const char *str1 = "JiangSu,University";  
    const char *str2 = "Un";  
    const char *res = strstr(str1, str2);  
      
    if(res != NULL)  
        cout<<"子串为:"<<res<<endl;  
    else  
        cout<<"NOT"<<endl;  
          
    system("pause");  
    return 0;
}

方法二:不允许使用库函数

#include <iostream>   
#include <stdlib.h>   
using namespace std; 

const char* StrStr(const char *str1, const char *str2)  
{  
     const char *rp;
     const char *sp;

     if(str1==NULL || str2==NULL)
     {
         return NULL;
     }
     while(*str1)   //与while(*str1!='\0')等价
     {
         rp=str1; //使rp指向str1的首地址
         sp=str2; //使sp指向str2的首地址

         do
         {
             if(!*sp) //等价于:if(*sp=='\0')
                 return str1;
         }while(*rp++==*sp++);
         str1++;
     }
     return NULL;  
} 
  
int main()  
{  
    const char *str1 = "JiangSu,University";  
    const char *str2 = "Un";  
    const char *str3 = " ";  
    const char *res1 = strstr(str1, str2);  
    const char *res2 = strstr(str1, str3);  
      
    if(res1!= NULL)  
        cout<<"子串为:"<<res1<<endl;  
    else  
        cout<<"NOT"<<endl;  

    if(res2!= NULL)  
        cout<<"子串为:"<<res2<<endl;  
    else  
        cout<<"NOT"<<endl; 
          
    system("pause");  
    return 0;
              
}