• 构造和改变一个string的其他方法


    构造一个string的其他方法:

    1string s1(cp, n),cp为c风格数组名或一个指向C风格数组的指针,则执行的操作为拷贝从cp开始包括cp在内的接下来n个字符给s1,n的默认值为sizeof(cp)/sizeof(int、char)。可以自由设定第一个参数(cp+1, cp+2,)

    2string s2(s, pos, len), s为一个string类型字符串,则执行的操作是将从下标为pos的字符开始,把包括s[pos]在内的往后len个字符拷贝给s2.   pos必须小于等于s.size(),否则构造函数的行为未定义,len的默认值为s.size() – pos,即string s3(s, pos)默认为拷贝从pos开始的所有字符,不能对第一个参数实行加减法,因为strin+int不存在

    第二种方式对c风格数组也是用,string s(cp, pos, len), 则将cp拷贝给一个string 字符串之后再来执行操作(即相当于执行string s(string(cp), pos, len)。Ps:n<cp.size(),但是第一种方式对string类型字符串却不适用,因为string类型不能转换成c风格类型。

    c风格数组的数组名相当于是一个指向该数组的指针,而string类型字符串则是一个类,类名不能当成一个指向该字符串的指针。

    3string s3 = s.substr(pos, n),     s.substr(pos,n)返回一个string,包含从pos开始的n个字符的拷贝。Pos的默认值为0,n的默认值为s.size() – pos, 急拷贝从pos开始的所有内容。Pos同样不能大于s.size(),否则会抛出一个out_of_rangge异常。

    改变string的其他方法:

    s.insert(pos, n, ch), 在位置pos之前插入n个ch字符
    
    s.insert(s.size(), 5, ‘!’)            //在s末尾插入5个感叹号
    s.erase(pos, n);从pos开始删除n个字符
    
    s.erase(s.size(), 5);        //从s删除最后5个字符 

    c风格:

    s.assign(cstr, n)            //将cstr的前n个字符赋值给s,n必须小于等于数组中的字符数
    
    s.insert(pos, cstr)         //在位置pos之前插入cstr

    string:

    s.insert(pos, s2);    //在s中位置pos之前插入s2的拷贝(最先插入的是s2的第一个字符)
    
    s.insert(pos1, s2, pos2, strlen)     //在s[pos1]之前插入s2中s[pos2]开始的strlen个字符


    修改string的操作:

    s.insert(pos, args)

    在pos之前插入args指定的字符。Pos可以是一个下标或一个迭代器。接受下标的版本返回一个指向s的引用;接受迭代器的版本返回指向第一个插入字符的迭代器。

    s.erase(pos, len)

    删除从位置pos开始的len个字符。如果第二个参数被省略,则删除从pos开始直至s末尾的所有字符,相当于len的默认值为s.size()-pos。返回一个指向s的引用。

    s.assign(args)

    将s中的字符替换为args指定的字符,返回一个指向s的引用

    s.append(args)

    将args指定字符追加到s。返回一个指向s的引用。

    s.replace(range, args)

    删除S中范围range内的字符,替换为args指定的字符。Range或者是一个下标和一个长度,或者是一对指向s的迭代器。返回一个指向S的引用


    args可以是下列形式之一:append和 assugn可以使用所有形式

    str不能与s相同,迭代器b和e不能指向s
    
    str                               字符串str
    
    str, pos, len                  str中从pos开始最多len个字符
    
    cp, len                         cp之指向的字符数组的前(最多)len个字符
    
    cp                               cp指向的以空字符结尾的字符数组
    
    n, c                              n个字符c
    
    b, e                             迭代器b和 e指定的范围内的字符
    
    初始化列表                 花括号保卫的,以逗号分隔的字符列表

    Replace和insert所允许的args形式依赖于range和pos是如何指定的。

    Replace

    (pos,len,args)

    Replace

    (b, e, args)

    Insert

    (pos, args)

    Insert

    (iter, args)

    Args

    可以是

    str

    str, pos, len

    cp, len

    cp

    n, c

    B2, e2

    初始化列表

    (该表摘自C++ primer 第五版 P323)

  • 相关阅读:
    7.$a = 'abcdef'; 请取出$a的值并打印出第一个字母
    8.PHP可以和sql server/oracle等数据库连接吗?
    6.能够使HTML和PHP分离开使用的模板
    4.用PHP打印出前一天的时间格式是2006-5-10 22:21:21
    5.echo(),print(),print_r()的区别
    3.数据库中的事务是什么?
    spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法
    tomcat7性能调优与配置(以windows版为例)
    eclipse中maven下载不了私服上面的第三方包问题
    birt4.6部署到tomcat及启动服务报错解决方法
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/12373477.html
Copyright © 2020-2023  润新知