题意:
一堆卡片,每个卡片两面分别写着字母和数字;验证 "元音字母’a’, ‘e’, ‘i’, ‘o’ , 'u’后面一定是偶数"命题成不成立。我们可以翻卡片来检查,问最少需要翻多少次
分析:
- 元音字母:翻
- 辅音字母:不翻
- 奇数:翻
- 偶数:不翻
Code:
#include<iostream>
using namespace std;
int main(){
string a;
cin>>a;
int t=0;
for(auto &c:a) //即for(char &c:a)
{
if(c=='1'||c=='3'||c=='5'||c=='7'||c=='9'||c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
{
t++;
}
}
cout<<t;
return 0;
}
收获:使用for(auto &c:s)、for(auto c:s)的区别
二者相比,for(auto &c:s)的时间复杂度小得多,因为其直接引用原字符串进行遍历操作,而for(auto c:s)是复制一个s字符串再进行遍历操作,需花费大量时间。
#include<iostream> using namespace std; int main() { string s("hello world"); for(auto c:s) c='t'; cout<<s<<endl;//结果为hello world for(auto &c:s) c='t'; cout<<s<<endl; //结果为ttttttttttt