题目的主要信息:
- 输入一行字符串,分别统计出其中英文字母、空格、数字和其它字符的个数
- 输入不考虑中文字符
具体做法:
题目所给的代码中,输入的字符串是一个字符数组,采用getline函数输入,这样会在输入的末尾增加一个'\0'表示字符串的结束,如果长度小于数组长度,输入所有字符后加'\0',如果长度大于数组长度,截断输入的前面部分再在最后加'\0'。
我们遍历数组的时候,遇到字符为'\0'就停止,然后依次检查是否是字母(大小写一起检查)、数字、空格,采用ASCⅡ来比较,如果上述三者都不是,则属于其他字符,简单的判断语句就可以解决。
#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),n为输入的字符串长度,一次遍历
- 空间复杂度:O(1),无其他额外空间