• 2017.11.12 第三章 字符串、向量和数组


    3.1 命名空间的using声明

    std::cin 表示从标准输入中读取内容。此处使用作用域操作符(::)表示:编译器从操作符左侧名字所示的作用域中寻找右侧那个名字。

    而使用using声明是最安全的一种方法。

    using 声明具有如下格式:

    using namespace::name;

    例如:

    #include <iostream>

    using std::cin;

    int main()

    {

      int i;

      cin>>i;                    //cin和std::cin含义相同

      cout<<i;      //错误,没有对应的using声明

      std::cout<<i;

    return 0;

    }

    3.2 标准库类型 string

    标准库类型string 表示可变长的字符序列,使用string 类型必须包含string头文件。作为标准库的一部分,string定义在命名空间std中。

    #include <string>

    using std::string;

    3.2.1 定义和初始化string对象

    string  s1;                 //s1是一个空字符串

    string s2(s1);            //s2是s1的副本

    string s2=s1;             //等价于s2(s1)

    string s3("value");       //s3是字面值“value”的副本,除了字面值最后面的那个空字符外

    string s3="value";      //等价于s3(“value”)

    string s4(n,'c');        //把s4初始化为由连续n个字符c组成的串

    使用=是拷贝初始化,其他是直接初始化。

    3.2.2 string 对象上的操作

    os<<s             //将s写到输出流os当中,返回os

    is>>s               // 从is中读取字符串赋给s,字符串以空白分隔,返回is

    getline(is,s)        //从is中读取一行赋给s,返回is

    s.empty()            //s为空返回true,否则返回false

    s.size()            //返回s中字符个数

    s[n]                   //返回s中第n个字符的引用,位置n从0计起

    s1+s2             //返回s1和s2连接后的结果

    s1=s2                 //用s2 的副本代替s1 中原来的字符

    s1==s2         //string 对象的相等性判断对字母 的大小写敏感

    s1!=s2

    <,<=,>,>=

     

    读写string

     

    #include <iostream>

    #include <string>

    using std::cin;

    using std::cout;

    using std::endl;

    using std::string;

    int main()

    {

    string s;

    cin>>s;          //执行读取操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符),从第一个真正的字符开始读,直到遇见下一处空白

    cout<<s<<endl;   //如果输入的是 “     Hello            World!”,输出是Hello

    return 0;

    }

    如果想保留空白符,则需要用getline()。getline只要遇到换行符就结束读取操作并返回结果。

    #include <iostream>
    #include <string>
    using std::cin;
    using std::cout;
    using std::endl;
    using std::string;
    int main()
    {
     string word;
     while (getline(cin,word))           //从输入中读取字符,放入word中,并返回cin
     {
      cout << word << endl;

     }
     return 0;
    }

    string 的empty 和 size 操作

    empty 函数根据string 对象是否为空返回一个对应的布尔值。

    以下程序输出非空行:

    while(getline(cin,line))

      if(!line.empty())

        cout<<line<<endl;

    size函数返回string 对象的长度(即string对象中字符的个数),可以使用size 函数只输出长度超过80个字符的行:

    string  line;

    while(getline(cin,line))

      if(line.size()>80)

        cout<<line<<endl;

    string::size_type类型

    size函数返回的是无符号整型数。

    比较string对象

    ==,!=,<,<=,>,>=,这些运算符都依照(大小写敏感的)字典顺序:

    1.如果两个string对象不同,而且较短string对象的每个字符都与较长string 对象对应位置字符相同,就说较短string 对象小于较长string 对象。

    2.如果两个string对象在某个对应位置上不一致,则string对象比较的结果其实是string对象中第一对相异字符比较的结果。

    字面值和string 对象相加

    当把string 对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string。

    string s7="Hello"+","+s2;               //错误,不能把字面值直接相加。

    3.2.3  处理string对象中的字符

    在cctype头文件中定义了一组标准库函数。

    isalnum(c)                当c为字母或数字时为真

    isalpha(c)                当c是字母时为真

    iscntrl(c)                      当c是控制字符时为真

    isdigit(c)                      当c是数字时为真

    isgraph(c)                  当c不是空格但可以打印时为真

    islower(c)                    当c是小写字母时为真

    isprint(c)                     当c是可打印字符时为真(即c是空格或c具有可视形式)

    ispunct(c)                   当c是标点符号时为真(即c不是控制字符、数字、字母、可打印空白中的一种)

    isspace(c)                   当c时空白时为真(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符中的一种)

    isupper(c)                    当c是大写字母时为真

    isxdigit(c)                     当c是十六进制数字时为真

    tolower(c)                      如果c是大写字母,输出对应的小写字母;否则原样输出c

    toupper(c)                      如果c是小写字母,输出对应的大写字母;否则原样输出c

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

    for (declaration : expression)

      statement

    其中,expression 部分是一个对象,用于表示一个序列,declaration部分负责定义一个变量,该变量将被用于访问序列中的基础元素。每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素值。

    string str(“some string”);

    for (auto c:str)

      cout<<c<<endl;

    使用下标执行随机访问

    例如,想要编写一个程序把0到15之间的十进制数转换成对应的十六进制,只需初始化一个字符串令其存放16个十六进制“数字”:

    const string hexdigits= "0123456789ABCDEF";

    cout<<"Enter a series of numbers between 0 and 15"<<"separated by spaces. Hit Enter when finished:"<<endl;

    string result;

    string::size_type n;

    while(cin>>n)

      if(n<hexdigits.size())

        result+= hexdigits[n];

    cout<<"Your hex number is : "<<result<<endl;

     

     

     

  • 相关阅读:
    易语言VS杀毒软件:基情复燃,转受为攻!
    android xml解析
    Activity中与ListActivity中使用listview区别
    Android四大基本组件介绍与生命周期
    eclipse_中的注释_快捷键
    ADB server didn't ACK
    JDK安装配置
    Android开发把项目打包成apk
    分享Kali Linux 2016.2第48周镜像文件
    iOS10 UI教程视图调试
  • 原文地址:https://www.cnblogs.com/wongsh/p/7821248.html
Copyright © 2020-2023  润新知