题目的主要信息:

  • 录入一句话,统计这句话中字母字符、数字字符、空白、标点符号和其它字符的个数
  • 要求使用字符函数

具体做法:

这道题不是用字符数组读入的字符串,而是直接用了string类。我们可以用length函数直接判断字符串的长度,然后遍历字符串,对于遍历到的字符依次用函数检查每个字符属于哪一类,相应类的变量加1.

字符判断函数 作用
isalpha() 判断字符是否是字母('a'-'z' 'A'-'Z')
isdigit() 判断字符是否是数字
isspace() 判断字符是否是空格、制表符、换行等标准空白
isalnum() 判断字符是否是字母或者数字
ispunct() 判断字符是标点符号
islower() 判断字符是否是小写字母('a'-'z')
isupper() 判断字符是否是大写字母('A'-'Z')

我们依次使用前三个函数检查字符即可,最后剩下的就是其他字符。

alt

#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)O(n)O(n)nnn为字符串长度,遍历整个字符串
  • 空间复杂度:O(1)O(1)O(1),常数空间