17.string对象中字符的处理:
cctype头文件中定义:
isalnum(c) 如果c是字母或数字,则为true
isalpha(c) 如果c是字符,则为true
iscntrl(c) 如果c是控制字符,则为true
isdigit(c) 如果c是数字,则为true
isgraph(c) 如果c不是空格,但可打印,则为true
isprint(c) 如果c是可打印字符,则为true
ispunct(c) 如果c是标点符号,则为true
isspace(c) 如果c是空白字符,则为true
isupper(c) 如果c是大写字母,则为true
islower(c) 如果c是小写字母,则为true
isxdigit(c) 如果c是十六进制数,则为true
tolower(c) 如果c是大写字母,则返回其小写形式,否则直接返回c
toupper(c) 如果c是小写字母,则返回其大写形式,否则直接返回c
空白字符指:空格,制表符,垂直制表符,回车,换行符,进纸符
(示例1:输出给定的string对象中标点符号的个数)
1 #include <iostream> 2 #include <string> 3 #include <cctype> 4 using namespace std; 5 6 void main() 7 { 8 string s("!Hello LatourEiffel!!!"); 9 string::size_type count = 0; 10 11 for (string::size_type index = 0; index != s.size(); index++) 12 { 13 if(ispunct(s[index])) 14 { 15 count++; 16 } 17 } 18 cout<<count 19 <<" punctuation characters in " 20 <<s<<endl; 21 }
(示例2:把string对象中的字母全部大写字母输出)
1 #include <iostream> 2 #include <string> 3 #include <cctype> 4 using namespace std; 5 6 void main() 7 { 8 string s("!Hello LatourEiffel!!!"); 9 10 for (string::size_type index = 0; index != s.size();index++) 11 { 12 s[index] = toupper(s[index]); 13 } 14 cout<<s<<endl; 15 }
18.标准库vector类型:
vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.
通过将类型放在类模版名称后面的<>中类指定数据类型:
vector<int> ivec;
vector<Sales_item> Sales_vec;
vector不是一种数据类型,而只是一个类模版.
vector类型的每一种都指定了其保存元素的类型,
如vector<int>和vector<string>都是数据类型.
vector对象的初始化:
vector<T> v1; vector保存类型为T的对象,默认构造函数V1为空
vector<T> v2(v1); v2是v1的一个副本
vector<T> v3(n,i); v3包含n个值为i的元素
vector<T> v4(n); v4含有值初始化的元素的n个副本
如:
vector<int> ivec(10,-1); //10 elements,each initialized to -1
vector<string> svec(10,"hi!"); //10 strings,each initialized to "hi!"
19.vector对象的操作:
v.empty() 如果v为空,则返回true,否则返回false
v.size() 返回v中元素的个数
v.push_back(t) 在v的末尾增加一个值为t的元素
v[n] 返回v中位置为n的元素
v1 = v2 把v1的元素替换为v2中元素的副本
v1 == v2 如果v1与v2相等,则返回true
注意:vector中size和empty的操作和string中相关操作类似:
vector<int>::size_type
20.vector的下标操作不能添加元素:
vector<int> ivec;
for (vector<int>::size_type ix = 0; ix != 10; ++ix)
{
ivec[ix] = ix;
}
错误:上述程序中的ivec是空的vector对象,而下标只能用于获取已存在的元素.
正确写法如下:
for (vector<int>::size_type ix = 0; ix != 10; ++ix)
{
ivec.push_back(ix);//ok!
}