zoukankan      html  css  js  c++  java
  • C++Primer_2021.11.1

    标准库就是武器库
    第三章:字符串、向量和数组
    标准库类型:
    string
    vector
    迭代器:它是string和vector的配套类型,常被用于访问string中的字符或vector中的元素。

    内置数据类型和其它内置类型一样,数组的实现与硬件密切相关。因此相对于标准库类型的string和vector,数组在灵活性上稍显不足。
    std::cin表示从标准输入中读取内容
    一档声明using namespace::name,就可以直接访问命名空间中的名字。如:std::cin; std::cout; std::endl;
    头文件不应该包含using声明,头文件的内容会拷贝到所有引用它的文件中。可能会产生始料未及的名字冲突。

    string的使用:
    初始化:
    常用一般有4中
    string s1;
    string s2 = s1; string s2(s1); 拷贝初始化和直接初始化;
    string s3 = "hiya"; string s2("hiya");
    string s4(10, 'c');

    对象上的操作:
    os << s
    is >> s1
    getline(is, s)
    s.empty()
    s.size()
    s[n]
    s1+s2
    s1=s2
    s1==s2
    s1!=s2
    <,<=,>,>=

    string s;
    cin >> s; // s对象自动忽略开头的空白(空格符、换行符、制表符)并从第一个真正的字符开始读起,直到遇到下一处空白为止。

    getline:读取一行,保留了输入时的空白符,此时需要替代>>,遇到换行符就立马返回函数。也可以返回它的流参数。

    string line
    // 每次读入一整行,直到文件末尾
    while(getline(cin, line))
    cout << line << endl;

    string::size_type类型是一个无符号类型的值,可存放下任何string对象的大小。而c++11通过auto和decltype来推导变量的类型。若表达式中混用带符号数和无符号数,可能会产生意想不到的结果。如:n是一个具有负值的int,则表达式
    s.size() < n 的判断结果几乎肯定是true。因为负值n会自动地转换成一个比较大的无符号值。
    对比string对象:大小敏感,按照字典排序,越往后越大

    为string对象赋值、两个string对象相加
    +两边至少有一个是string类型

    处理string对象中的字符:
    在名为cname的头文件中定义的名字从属于命名空间std,而定义在名为.h的头文件中的则不然。一般来说,C++程序应该使用名为cname的头文件而不使用name.h的形式,标准库中的名字总能在命名空间std中找到。

    处理每个字符?使用基于范围的for语句。

    string str("some string");
    for(auto c : str)
    cout << c << endl;

    使用循环for语句改变字符串中的字符,需要把循环变量定义成引用类型,所谓引用只是给定对象的一个别名。
    string str("some string");
    for(auto &c : str)
    c = toupper(c);

    只处理一部分字符?
    使用小标运算符[]或迭代器。
    只要字符串不是常量,就能为下标运算符返回的字符赋新值。
    string s("some string");
    if (!s.empt())
    s[0] = toupper(s[0]);
    另一种:
    string s = "some string";
    for (decltype(s.size()) index = 0;
    index != s.size() && !isspace(s[index]); ++index)
    {
    s[index] = toupper(s[index]);
    }

    cout << s << endl;
    

    小标的类型为:string::size_type,因为此类型是无符号数,可确保小标不会小于0。此时,代码只需要保证小标小于size()的值就可以了。

    例如:编写一个程序把0~15之间的十进制数转化为对应的十六进制形式,只需初始化一个字符串,令其存放16个十六进制“数字”。

    无论何时用到字符串的小标,都应该检查其合法性。

    标准库中的字符处理函数:
    isalnum(c) 当c是alpha或数字时为真
    iaalpha(c)
    iscntrl(c)
    isdigit(c)
    isgraph(c) 当c不是空格但可打印时为真
    islower(c) 当c是小写字母时为真
    isprint(c) 是可打印字符时为真
    ispunct(c) 是标点符号是为真
    isspace(c) 当c是空白时为真(是空格、横向制表符、纵向制表符、回车符、换行符、进纸符中的一种)
    isupper(c)
    isxdigit(c) 当c是十六进制数字时为真
    tolower(c)
    toupper(c)

  • 相关阅读:
    持续集成
    Centos7配置安装及优化
    vi/vim如何添加或删除多行注释.
    [Ansible实战]-批量配置初始化主机环境.
    VW模板机准备
    一次CPU过载报警处理
    [Ansible实战]-免交互批量管理Zabbix
    [Ansible实战]-ansible初始化mysql数据库
    [Ansible实战]-ansible部署Redis-5.x集群
    远程管理服务(SSH).
  • 原文地址:https://www.cnblogs.com/gwzz/p/15497361.html
Copyright © 2011-2022 走看看