题解 | #统计字符#

统计字符

http://www.nowcoder.com/practice/539054b4c33b4776bc350155f7abd8f5

题目的主要信息:

  • 统计一行字符中英文字母、空格、数字、其他符号的个数
  • 需要注意的是,可能会有多行输入

方法一:ASCII码统计

根据ASCII码表可知,每一个字符都有编码,并且ASCII码的编号是连续的,同时,c++在比较两个字符的时候是根据ASCII码比较的,因此我们可以根据ASCII码对字符进行判断是数字、英文还是空格,剩下的就是其他字符。由于题目告诉我们会有多个输入,每个输入就是一行字符,因此我们用一个while循环来读取输入,对每一行进行统计的时候需要将统计变量清零。

alt

具体做法:

#include<iostream>
#include<string>

using namespace std;

int main(){
    string str;
    int num_e,num_w,num_n,num_o;//英文字母、空格、数字、其他字符的数量
    num_e=num_w=num_n=num_o=0;
    while(getline(cin,str))//逐行统计
    {
        num_e=num_w=num_n=num_o=0;//每从新的一行开始统计的时候都要清零
        for(int i=0;i<str.size();i++){
            if(str[i]>='0'&&str[i]<='9'){//数字
                num_n++;
            }else if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')){//英文字母
                num_e++;
            }else if(str[i]==' '){//空格
                num_w++;
            }else num_o++;//其他字符
        }
        cout<<num_e<<endl<<num_w<<endl<<num_n<<endl<<num_o<<endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n),需要遍历字符串一遍。
  • 空间复杂度:O(1)O(1),只用了常数空间用来存储统计数量。

方法二:

方法二总体思想和方法一相同,区别在于方法一是通过ASCII码判断字符,比较条件比较繁琐,其实c++有内置的函数可以调用判断字符类型。isalpha()判断当前字符是否为英文字母、isdigit()判断当前字符是否为数字、isspace()判断当前字符是否为空格。

具体做法:

#include<iostream>
#include<string>

using namespace std;

int main(){
    string str;
    int num_e,num_w,num_n,num_o;//英文字母、空格、数字、其他字符的数量
    num_e=num_w=num_n=num_o=0;
    while(getline(cin,str))//逐行统计
    {
        num_e=num_w=num_n=num_o=0;//每从新的一行开始统计的时候都要清零
        for(int i=0;i<str.size();i++){
            if(isdigit(str[i])){//数字
                num_n++;
            }else if(isalpha(str[i])){//英文字母
                num_e++;
            }else if(isspace(str[i])){//空格
                num_w++;
            }else num_o++;//其他字符
        }
        cout<<num_e<<endl<<num_w<<endl<<num_n<<endl<<num_o<<endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n),每次统计都需要遍历字符串。
  • 空间复杂度:O(1)O(1),只使用了常数空间记录数量。
全部评论

相关推荐

书海为家:实习是成为大厂正式员工很好的敲门砖,看您的简历中有一段实习经历,挺好的。我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己实习时做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
点赞 评论 收藏
分享
03-12 14:52
已编辑
长沙学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务