题目的主要信息:
- 录入一句话,统计这句话中字母字符、数字字符、空白、标点符号和其它字符的个数
- 要求使用字符函数
具体做法:
这道题不是用字符数组读入的字符串,而是直接用了string类。我们可以用length函数直接判断字符串的长度,然后遍历字符串,对于遍历到的字符依次用函数检查每个字符属于哪一类,相应类的变量加1.
字符判断函数 | 作用 |
---|---|
isalpha() | 判断字符是否是字母('a'-'z' 'A'-'Z') |
isdigit() | 判断字符是否是数字 |
isspace() | 判断字符是否是空格、制表符、换行等标准空白 |
isalnum() | 判断字符是否是字母或者数字 |
ispunct() | 判断字符是标点符号 |
islower() | 判断字符是否是小写字母('a'-'z') |
isupper() | 判断字符是否是大写字母('A'-'Z') |
我们依次使用前三个函数检查字符即可,最后剩下的就是其他字符。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
getline(cin, str);
int whitespace = 0;
int digits = 0;
int chars = 0;
int others = 0;
// write your code here......
for(int i = 0; i < str.length(); i++){ //遍历字符串
if(isalpha(str[i])) //判断是否是字母
chars++;
else if(isdigit(str[i])) //判断是否是数字
digits++;
else if(isspace(str[i])) //判断是否是空格
whitespace++;
else
others++;
}
cout << "chars : " << chars
<< " whitespace : " << whitespace
<< " digits : " << digits
<< " others : " << others << endl;
return 0;
}
复杂度分析:
- 时间复杂度:O(n),n为字符串长度,遍历整个字符串
- 空间复杂度:O(1),常数空间