练习6.17:编写一个函数,判断string 对象中是否含有大写字母。编写另一个函数,把 string 对象全都改成小写形式。在这两个函数中你使用的形参类型相同吗?为什么?
#include<iostream>
using namespace std;
#include<string>
bool hasUpper(const string&str) {
for (auto c : str) {
if (isupper(c))
return true;
return false;
}
}
void change(string& str) {
for (auto &c : str) {
c = tolower(c);
}
}
int main() {
string str;
cout << "输入一个字符串" << endl;
cin >> str;
if (hasUpper(str)) {
change(str);
cout <<"转换后"<< str<<endl;
}
else {
cout << "无需转换";
}
}
本题要点;
1.我们在写函数的时候要养成好的习惯,如果不需要修改传入参数的内容,我们就用常量引用类型。比如第一个函数中 const string&str。第二个函数需要修改传入参数的内容,所以我们就使用非常量引用.
2.for(auto c:str) 这个语句的含义是将str的元素拷贝到c中。
int main() {
string str="ABC";
for (auto c : str) {
cout << "c的值是"<<c <<" " << "str的值是" << str << endl;
}
}
3.for(auto & c:str)是修改str的元素
#include<iostream>
using namespace std;
#include<string>
int main() {
string str="ABC";
for (auto &c : str) {
c = tolower(c);//将c变为小写
cout << "c的值是"<<c <<" " << "str的值是" << str << endl;
}
}
可以看出随着c的改变,str的元素也在随之改变。