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)

  • 相关阅读:
    POJ 1795 DNA Laboratory
    CodeForces 303B Rectangle Puzzle II
    HDU 2197 本源串
    HDU 5965 扫雷
    POJ 3099 Go Go Gorelians
    CodeForces 762D Maximum path
    CodeForces 731C Socks
    HDU 1231 最大连续子序列
    HDU 5650 so easy
    大话接口隐私与安全 转载
  • 原文地址:https://www.cnblogs.com/gwzz/p/15497361.html
Copyright © 2011-2022 走看看