6. 标准库类型
string
#include<string>
读:cin>>str;
① 读取并忽略开头所有的空白字符(空格、换行、制表符等)
② 读取字符直至再次遇到空白字符
可用getline()函数来读取整行文本:
不忽略开头空白符
不包括换行符
写:cout<<str;
string::size_type类型
string库中size()函数返回的是string::size_type类型,虽然把它赋值给int类型的变量不会出现编译错误,但是由于int类型表示的范围太小,容易造成溢出。
string类型的大小判断
按字典排序顺序(小写字母>大写字母),从第一个字符开始进行大小判断,一旦判断出大小,则确定两个字符串的大小并不再向后进行大小判断。
string对象对字符的处理
isalnum(c) |
如果 c 是字母或数字,则为 True。 |
isalpha(c) |
如果 c 是字母,则为 true。 |
iscntrl(c) |
如果 c 是控制字符,则为 true |
isdigit(c) |
如果 c 是数字,则为 true。 |
isgraph(c) |
如果 c 不是空格,但可打印,则为 true。 |
islower(c) |
如果 c 是小写字母,则为 true。 |
isprint(c) |
如果 c 是可打印的字符,则为 true。 |
ispunct(c) |
如果 c 是标点符号,则 true。 |
isspace(c) |
如果 c 是空白字符,则为 true。 |
isupper(c) |
如果 c 是大写字母,则 true。 |
isxdigit(c) |
如果是 c 十六进制数,则为 true。 |
tolower(c) |
如果 c 大写字母,返回其小写字母形式,否则直接返回 c。 |
toupper(c) |
如果 c 是小写字母,则返回其大写字母形式,否则直接返回 c。 |
【例】
////////////////////////////////////////////////////读入未知数量的字符串
string str;
while(cin>>str)
cout<<str<<endl;
如果输入:hello,hello word!
则输出:hello,
hello
world!
////////////////////////////////////////////////////计算一个字符串中标点的个数
int x;
int count=0;
string str;
if(getline(cin,str))
{
cout<<str<<endl;
for(string::size_type i=0;i<str.size();i++)
if(ispunct(str[i]))
count++;
}
cout<<count<<endl;
/////////////////////////////////////////////////////把一个字符串所有字母改成大写
string str;
getline(cin,str);
for(string::size_type i=0;i<str.size();i++)
str[i]=toupper(str[i]);
cout<<str<<endl;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
vector
是同一种类型的对象的集合,每个对象都有一个对应的整数索引值(类似数组)
#include<vector>
vector是类模版,定义时必须指明是那种类型的容器。
格式:
vector<类型名> 容器变量名;
vector对象动态增长
在元素值已知的情况下,更有效的方法是先初始化一个空vector对象,然后再动态地增加元素。
vector<T>::size_type
使用size_type类型时,必须指出该类型是在哪定义的。
不能直接写成vertor::size_type。
【例】
////////////////////////////////////////////////////将个5个字符串放入字符串容器里,然后输出
vector<string> strvect;
string str;
for(string::size_type i=0;i<5;i++)
{
getline(cin,str);
strvect.push_back(str);
cout<<strvect[i]<<endl;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
iterator
每种容器类型都定义了自己的迭代器类型
vector<T>::iterator 迭代器变量名;
begin():返回指向容器内第一个元素的迭代器。
end():返回指向容器内末端元素的下一个元素的迭代器。
const_iterator:只能用于读取容器内的元素,不能改变其值。
const vector类型只能用const_iterator迭代器来遍历。
【例】
////////////////////////////////////////////////////将个5个字符串放入字符串容器里,然后输出
vector<string> strvect;
string str;
for(string::size_type i=0;i<5;i++)
{
getline(cin,str);
strvect.push_back(str);
cout<<strvect[i]<<endl;
}
////////////////////////////////////////////////////用迭代器修改容器内元素的值,然后输出
vector<int> intvect(10,1);
for(vector<int>::size_type i=0;i<intvect.size();i++)
cout<<intvect[i]<<" ";
cout<<endl;
vector<int>::iterator intvectiter=intvect.begin();
while(intvectiter!=intvect.end())
{
*intvectiter=0;
cout<<*intvectiter<<" ";
intvectiter++;
}
cout<<endl;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bitset
二进制位的有序集
#include<bitset>
定义格式:
bitset<长度> 变量名;
用unsigned值初始化bitset对象
该值将转化为二进制的位模式,然后顺序放入bitset中。
如果bitset的长度小于该数的二进制位数,则自动舍去高位。
如果bitset的长度大于该数的二进制位数,则高位自动补0。
用string对象初始化bitset对象
String对象直接表示为位模式,反向放入bitset中。
【例】
////////////////////////////////////////////////////用迭代器修改容器内元素的值,然后输出
vector<int> intvect(10,1);
for(vector<int>::size_type i=0;i<intvect.size();i++)
cout<<intvect[i]<<" ";
cout<<endl;
vector<int>::iterator intvectiter=intvect.begin();
while(intvectiter!=intvect.end())
{
*intvectiter=0;
cout<<*intvectiter<<" ";
intvectiter++;
}
cout<<endl;
/////////////////////////////////////////////////////输入一个串,用bitset存好,然后取反等操作
string str;
cin>>str;
bitset<32> strbit(str);
for(size_t i=0;i<strbit.size();i++)
cout<<strbit[i];
cout<<endl;
strbit.flip();//取反
for(size_t i=0;i<strbit.size();i++)
cout<<strbit[i];
cout<<endl;
strbit.set();//全部置1
for(size_t i=0;i<strbit.size();i++)
cout<<strbit[i];
cout<<endl;
strbit.reset();//全部置0
for(size_t i=0;i<strbit.size();i++)
cout<<strbit[i];
////////////////////////////////////////////////////输入一个正整数,存入bitset,然后输出
unsigned int x;
cin>>x;
bitset<32> intbit(x);
for(size_t i=0;i<intbit.size();i++)
cout<<intbit[i];
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
---------------------------------《c++ primer》第三章标准库类型学习笔记整理 2010/11/06 李诗思