点睛之笔:使用STL的最高境界就是程式看不到for和while loop,完全用STL 的algorithm搞定。
下例中我们需要将vector中的所有字符串变成小写,使用transfor()对vector中的每个string元素做处理,C\C++的字符串没有提供转写小写的功能,但是C中有对每个字符转写小写的功能。犹豫string也是个container,我们需要再次使用transform()来处理每个字符,并且使用<cctype>中的tolower()将每个字符改成小写。
09 #include <iostream>
10
#include <cctype>
11
#include <algorithm>
12
#include <vector>
13
#include <string>
14
15
using namespace std;
16
17
string& toLower(string&);
18
19
int main() {
20
vector<string> svec;
21
svec.push_back("Stanley B. Lippman");
22
svec.push_back("Scott Meyers");
23
svec.push_back("Nicolai M. Josuttis");
24
25
// Modify each string element
26
transform(svec.begin(), svec.end(), svec.begin(), toLower);
27
28
copy(svec.begin(),svec.end(), ostream_iterator<string>(cout,"\n"));
29
30
return 0;
31
}
32
33
string& toLower(string& s) {
34
// Modify each char element
35
transform(s.begin(), s.end(), s.begin(), tolower);
36
return s;
37
}
补充:transform是遍历一个容器里面的元素然后执行一个操作。
参数1和参数2是数据起始和结束位置(迭代器,也可以是string)
如:string s="hello"; transform(s.begin(),s.end(),s.begin(),toupper);
参数3是写入目标的起始位置;
参数4是执行的操作(函数)。
思想2:
实例:#include<iostream>
using namespace std;
int my_toupper(int ch)
{
if(ch>='a'&&ch<='z')
{
return ch-(int('a')-int('A'));
}
else
{
return ch;
}
}
int my_tolower(int ch)
{
if(ch>='A'&&ch<='Z')
{
return ch+(int('a')-int('A'));
}
else
{
return ch;
}
}
int main()
{
char buf[]="abc123ABC";
char *p=buf;
while(*p!='\0')
{
cout<<(char)my_toupper(*p)
<<","
<<(char)my_tolower(*p)
<<endl;
++p;
}
return 0;
}
思路3:
posted on 2012-04-06 09:14
愤怒的考拉 阅读(311)
评论(0) 编辑 收藏