题目的主要信息:
- 找出给定字符串中大写字符(即'A'-'Z')的个数
- 进阶要求:时间复杂度,空间复杂度
方法一:ASCⅡ码比较
具体做法:
大写字母A的ASCⅡ码为65,大写字母Z的ASCⅡ码为90,我们只要遍历字符串,比较每个字符的ASCⅡ码在这之间就可以统计大写字母的个数。
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
while(getline(cin, s)){
int count = 0;
for(int i = 0; i < s.length(); i++) //遍历字符串每个字符
if(s[i] >= 65 && s[i] <= 90) //用ASCⅡ码比较
count++;
cout << count << endl;
}
return 0;
}
复杂度分析:
- 时间复杂度:,其中为字符串的长度,遍历比较
- 空间复杂度:,无额外空间
方法二:库函数
具体做法:
直接使用库函数isupper判断字符是否是大写字母,遍历字符串,每个字符依次调用函数判断,然后统计计数。
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
while(getline(cin, s)){
int count = 0;
for(int i = 0; i < s.length(); i++) //遍历字符串每个字符
if(isupper(s[i])) //用函数检查是否是大写字母
count++;
cout << count << endl;
}
return 0;
}
复杂度分析:
- 时间复杂度:,其中为字符串的长度,遍历判断,其中isupper函数复杂度为
- 空间复杂度:,无额外空间