记录一下花了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++基础本来就不好,而且生疏所以更是费事。希望大家通过练题能找到自己的问题,早日拿到好的工作!!!!
网友评论