zoukankan      html  css  js  c++  java
  • 代码题(63)— 字符串拷贝

    1、strcpy函数的实现

    编写 strcpy 函数

    已知 strcpy 函数的原型是

    Char *strcpy(char *strDest,const char *strSrc);

    其中 strDest 是目的字符串, strSrc 是源字符串。

    (1) 不调用 c++ 、 /c 的字符串库函数,请编写函数 strcpy

    (2) Strcpy 能把 strSrc 的内容复制到 strDest ,为什么还要 char * 类型的返回值?

    char * strcpy_s(char *dst, const char *src)   //[1]
    {
        if (dst == NULL || src == NULL)
            return NULL;//[2]
    
        char *ret = dst;  //[3]
        //while ((*dst++ = *src++) != ''); //[4]
    
        while (*src != NULL)
        {
            *dst = *src;
            dst++;
            src++;
        }
        *dst = '';
        return ret;
    }
    
    int main()
    {
        char * dest = new char();
        char * sc = "hello";
        cout << (strcpy_s(dest, sc)) << endl;
        return 0;
    }

    第二个问题:strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值?这是为了实现链式表达式。 所谓链式表达式就是可以将strcpy函数作为其他函数的参数。
     例如 int length = strlen( strcpy( strDest, “hello world”) );

    2、strcmp函数的实现

    用一个函数实现两个字符串的比较,即自己编写一个strcmp函数,函数原型为:
    int strcmp(char *p1,char *p2); 设p1指向字符串s1,p2指向字符串s2,
    要求:
    1)当s1=s2时,函数的返回值为0,
    2)如果s1不等于s2,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不相同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果s1<s2,则输出负值。

    int strcmp_s(char *p1, char *p2)
    {
        while (*p1 != ''&& *p2 != '')
        {
            if (*p1 == *p2)
            {
                p1++;
                p2++;
    
            }
            else if (*p1 < *p2)
                return -1;
            else
                return 1;
        }
        return 0;
    
    }
    
    int main()
    {
        char * dest = "abbsudjc";
        char * sc = "hello";
        cout << (strcmp_s(dest, sc)) << endl;
        return 0;
    }

    3、字符串翻转

    class Solution {
    public:
        string ReverseSentence(string str) {
            if(str.size()==0)
                return str;
            reverse(str,0,str.size()-1);
            int start = 0;
            for(int i=0;i<str.size();i++)
            {
                if(str[i]==' ')
                {
                    reverse(str, start, i-1);
                    start = i+1;
                }
            }
            reverse(str, start, str.size()-1);
            return str;
        }
    private:
        void reverse(string& str,int start,int end)
        {
            while(start < end)
                swap(str[start++], str[end--]);
        }
    };
    void reverse(char *str,int len) //反转函数,len指要反转字符串的长度
    {
     char *p=str,*q=str+len-1,temp;  //指针加法的单位是指针对应类型的字节数,此处因为是char,所以即为1
     while(*q=='')
         q--;
     while(q>p)
       { 
         temp=*p;
         *p=*q;
         *q=temp;
     
         p++;
         q--;
       }
    }
  • 相关阅读:
    [LeetCode] 278. First Bad Version 第一个坏版本
    [LeetCode] 119. Pascal's Triangle II 杨辉三角 II
    [LeetCode] 118. Pascal's Triangle 杨辉三角
    [LeetCode] 272. Closest Binary Search Tree Value II 最近的二叉搜索树的值 II
    校验数组中是否存在某一个元素
    css sprites 图片位置计算
    后台获取当前客户端浏览器的类型
    Linq,拉姆达表达式注意!
    window.open 设置高和宽无效
    asp:FileUpload 控件上传多文件
  • 原文地址:https://www.cnblogs.com/eilearn/p/9678035.html
Copyright © 2011-2022 走看看