点睛之笔:使用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
15using namespace std;
16
17string& toLower(string&);
18
19int 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
33string& 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) 编辑 收藏