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;

 

 

 

原文地址:https://www.cnblogs.com/wongsh/p/7821248.html