题目的主要信息:

  • 输入一行字符串,分别统计出其中英文字母空格数字其它字符的个数
  • 输入不考虑中文字符

具体做法:

题目所给的代码中,输入的字符串是一个字符数组,采用getline函数输入,这样会在输入的末尾增加一个'\0'表示字符串的结束,如果长度小于数组长度,输入所有字符后加'\0',如果长度大于数组长度,截断输入的前面部分再在最后加'\0'。

我们遍历数组的时候,遇到字符为'\0'就停止,然后依次检查是否是字母(大小写一起检查)、数字、空格,采用ASCⅡ来比较,如果上述三者都不是,则属于其他字符,简单的判断语句就可以解决。

alt

#include <iostream>
#include <cstring>
using namespace std;

int main() {

    int letter = 0;
    int digit = 0;
    int space = 0;
    int other = 0;
    
    char buf[1024] = {0};
    cin.getline(buf, sizeof(buf));

    // write your code here......
    for(int i = 0; buf[i] != '\0'; i++){ //遍历字符串到'\0'为止
        char c = buf[i];
        if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') //大小写字母
            letter++;
        else if(c >= '0' && c <= '9') //数字
            digit++;
        else if(c == ' ')  //空格
            space++; 
        else //其他字符
            other++;
    }
    cout << "letter:" << letter << " digit:" << digit << " space:" << space << " other:" << other << endl;

	return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n)O(n)nnn为输入的字符串长度,一次遍历
  • 空间复杂度:O(1)O(1)O(1),无其他额外空间