美文网首页
剑指offer第二题&C++的坑爹复习史

剑指offer第二题&C++的坑爹复习史

作者: 白老包 | 来源:发表于2018-08-26 00:49 被阅读0次

    记录一下花了32天时间做的一道题。
    请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
    这道题可以解释为什么我深爱着python。

    # -*- coding:utf-8 -*-
    class Solution:
        # s 源字符串
        def replaceSpace(self, s):
            s = s.replace(' ','%20')
            return s
    

    完了就这多。
    本来以为换成C++依然很简单,但是我错了。其实感觉C++有封装好的方法或者接口,只是我为了复习一下语法,还是折腾的复杂了点。
    按照python的思路找到字符串类的replace方法就行了。于是我开始找C++的文档。问了同学找到下面这个网址,还好虽然是英文但是勉强看得懂。
    http://www.cplusplus.com/reference/
    然后找到example准备粘贴复制。然而突然发现形参是指针。

    void replaceSpace(char *str,int length) 
    

    指针是学C语言时候的噩梦,虽然用了半年Qt但是一直没有完全明白指针是个啥。好吧查资料。
    资料说因为指针本体是不能通过参数传递传给函数的,所以只能传指针。
    所以在形参中

    void myFunction(int *param)
    void myFunction(int param[10])
    void myFunction(int param[])
    

    这三种形式是一样的。所以有人认为数组的头和指针是同一个东西。(这句话好像有点问题,暂时不讨论)。所以在试题的形参中我们直接调用str就行了。
    好了在本地IDE调试。麻烦又来了,我windows本地没有C++环境。第一题临时用树莓派的g++抓来顶包。但是现在树莓派在编译opencv卡的要命(所以知道我用opencv都是掉的什么接口了吧)。本地装一个吧,以前有VS2015社区版的镜像,花了一下午装上了,然后发现所有的标准库找不到。网上搜了一下好麻烦,加上编译opencv搞得我焦头烂额。算了吧不搞了。但是IDE又不得不装,终于在网上找到了个开源的C++IDE:codeblocks。几分钟装上了,发现用在这种教育类的小程序很好用。然后开始调程序。写了一会儿发现
    str调用所有的string的方法都不能用。都提示char没有这种类。我想char不是字符串,string也是字符串吗?怎么不能用。然后折腾了好久,看到一篇博文恍然大悟,这两个不是同一个东西。
    C++是面向对象编程,c是面向过程的语言。然而C++要兼容C。所以C++兼容C的字符串写法。我们想想C语言字符串怎么写的char str[10] = "xxxxx".而C++是string str1 = "xxxx"。顺便提一句Qt里是Qstring str = "xxxx",Qt的文档真的明了好多,导致查询C++标准库的文档很不习惯,被惯坏了。所以需要两者之间转换。转换完成以后这个程序终于写好了。然后再string的析构上还出了点问题,但是今天太晚了就直接贴出代码结束今天的总结。

    class Solution {
    public:
        void replaceSpace(char *str,int length) 
        {
            string tmp = "";
            for(int i =0;*(str+i)!='\0';i++)
            {
                if(*(str+i)==' ')
                {
                    tmp = tmp + "%20";
                }
                else
                {
                    tmp = tmp + *(str+i);
                }
            }
            strcpy(str,tmp.c_str());
        }
    };
    

    python熟练一些,可以快速找到需要的函数或者方法。C++基础本来就不好,而且生疏所以更是费事。希望大家通过练题能找到自己的问题,早日拿到好的工作!!!!

    相关文章

      网友评论

          本文标题:剑指offer第二题&C++的坑爹复习史

          本文链接:https://www.haomeiwen.com/subject/fgeniftx.html