2017.11.12 第三章 字符串、向量和数组
2018-06-17 21:34:54来源:未知 阅读 ()
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;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Z 字形变换 2020-04-14
- 翻转字符串里面的单词 2020-04-10
- 第三章 类与对象进阶 2020-04-04
- 用C++实现:FJ的字符串打印 2020-04-04
- [题记]字符串转换整数-leetcode 2020-04-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash