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 李詩思