1.一个简单程序判断知否含有大写字母
#include <iostream>
using std::cout; using std::cin; using std::endl;
#include <string>
using std::string;
#include <cstring>
#include <vector>
using std::vector;
#include <iterator>
using std::begin; using std::end;
#include <cstddef>
using std::size_t;
#include <cctype>
bool judge_capital( string &s)
{
for(auto c : s)
{
if(isupper(c)) return true;
}
return false;
}
int main()
{
string str = "Hello!";
if(judge_capital(str))
{
cout << "ok" << endl;
}else
{
cout << "no" << endl;
}
return 0;
}
初看之下这个程序没有问题,而且运行也正确,可是其中却隐藏了很深的陷阱;
int main()
{
// string str = "Hello!";
if(judge_capital("Hello"))
{
cout << "ok" << endl;
}else
{
cout << "no" << endl;
}
return 0;
}
会报错,无法判断常量字符串是否含有大小写。再看
int main()
{
auto &str = "Hello";
if(judge_capital(str))
{
cout << "ok" << endl;
}else
{
cout << "no" << endl;
}
return 0;
}
常量引用无法赋值给变量引用,所以会报错,因此尽量使用常量引用。
bool judge_capital( const string &s)
{
for(auto c : s)
{
if(isupper(c)) return true;
}
return false;
}
int main()
{
auto &str = "Hello";
if(judge_capital(str))
{
cout << "ok" << endl;
}else
{
cout << "no" << endl;
}
return 0;
}
在只需要读取对象的情况下,改为常量引用可以避免许多的麻烦。
2.把大写字母改为小写字母。
#include <iostream>
using std::cout; using std::cin; using std::endl;
#include <string>
using std::string;
#include <cstring>
#include <vector>
using std::vector;
#include <iterator>
using std::begin; using std::end;
#include <cstddef>
using std::size_t;
#include <cctype>
bool judge_capital(const string &s)
{
for(auto c : s)
{
if(isupper(c)) return true;
}
return false;
}
void change_lower(string &s)
{
for(auto &c : s)
{
c = tolower(c);
}
}
int main()
{
string str = "Hollo";
change_lower(str);
cout << str << endl;
return 0;
}
在需要修改对象值的时候,使用普通引用。