zoukankan      html  css  js  c++  java
  • 【剑指offer】算法题05.替换空格(C++)

    请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
    
    【示例 1】
    
    输入:s = "We are happy."
    输出:"We%20are%20happy."
    
    【限制】
    
    0 <= s 的长度 <= 10000

    【解题思路】

    class Solution {
    public:
      string replaceSpace(string s) {
        string s2;
          for(auto c:s){
          if(s[i]!=' ')
            s2 += s[i];
          else
            s2 += "%20";
        }
        return s2;
      }
    };

    注意事项】 

    1. C++中的单引号和双引号问题。

    单引号是字符型, 双引号是字符串型
    单引号引起的一个字符实际上代表一个整数。
    双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针。该数组会被双引号之间的字符以及一个额外的二进制为零的字符 ‘’ 初始化。

    "a"和’a’的区别,前者是字符串,后者是字符。
    实际上 ”a" 是 “a”,以’’结尾。而‘a’单单表示a这个字符。
    字符串可以是"abcde"这样的表示多个字符的一个组合,但是’abcde’这样就是错误的!!!

    总结一下,通常情况下单个字符用字符,多个字符组合起来就是字符串了~

    2.关于for(auto c:s)的写法。

    在c11标准下可以执行的特殊格式的for循环语句,区别在于引用类型可以改变原来的值

    --------------------------------------------------------------
    auto:用来声明自动变量。它是存储类型标识符,表明变量(自动)具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。其实大多普通声明方式声明的变量都是auto变量,他们不需要明确指定auto关键字,默认就是auto的了。auto变量在离开作用域是会变程序自动释放,不会发生内存溢出情况(除了包含指针的类)。使用auto变量的优势是不需要考虑去变量是否被释放,比较安全。
    new:new是用来在堆上申请内存地址的关键字,他产生的变量不会自动释放,除非delete来手动释放,或者程序结束时由操作系统释放,使用new的优势是内存使用比较灵活,理论可以申请任意大小的内存区块(实际与操作系统有关),但这很容易产生问题,一不小心忘记释放对象,特别是在频繁调用的函数内创建的对象忘记释放时,会产生内存溢出,严重时导致程序出错,系统崩溃。new一般都是在类的定义中使用,结合delete可以使包含new出来对象的类也具有自带变量功能,这样就继承了两种方式的优势。
    --------------------------------------------------------------
    另外,最新的C++标准更新了auto关键字的功能除了具有原有的含义外,还增加了一种类似其他高级语言的型别推导特性使用auto来代替变量的类型,前提是被明确类型的初始化变量初始化的,可以使用auto关键字比如int i=10; auto a = i; //这样a也是int类型了这在使用一些模板类的时候,对于减少冗赘的代码也很有用
    ---------------------------------------------------------------
    另外一个题外话:auto的对应类型不是使用new出来的变量,也不是static变量
    static变量是程序结束的时候才释放对象的,但它不需要手动释放。
    static如果在一个函数内申明,这每次进入这个函数时,还是使用第一次声明的变量,并且还保存的上次使用的值。
    static变量如果在结构和类中使用,这结构或类定义的一切对象,都将共享唯一static变量。
    auto变量在函数结束时即释放了,再次调用这个函数时,又重新定义了一个新的变量

  • 相关阅读:
    小数据池,深浅拷贝以及集合
    字典
    列表,元组以及range
    整型,布尔值以及字符串详解
    while循环,格式化输出,运算符及编码初识
    Python简介以及入门
    码云以及Git的使用
    JaveScript——简介、语法
    网页练习
    HTML_css样式表 样式属性 格式布局
  • 原文地址:https://www.cnblogs.com/ziziQ/p/12509732.html
Copyright © 2011-2022 走看看