题意整理。

  • 键盘输入两个字符串str和substr。
  • 求substr在str中出现的次数。

方法一(循环+字符函数)

1.解题思路

  • 遍历字符串。
  • 检查当前字符的类型。如果是字母,字母计数加1;如果是空格,空格计数加1;如果是数字,数字计数加1;如果以上都不是,其它计数加1。

动图展示: alt

2.代码实现

#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;

    //遍历字符串
    for(int i=0;i<str.size();i++){
        //如果是字母,字母计数加1
        if(isalpha(str[i])){
            chars++;
        }
        //如果是空格,空格计数加1
        else if(isspace(str[i])){
            whitespace++;
        }
        //如果是数字,数字计数加1
        else if(isdigit(str[i])){
            digits++;
        }
        //如果以上都不是,其它计数加1
        else{
            others++;
        }
    }

    cout << "chars : " << chars
        << " whitespace : " << whitespace
        << " digits : " << digits
        << " others : " << others << endl;

    return 0;
}

3.复杂度分析

  • 时间复杂度:需要遍历字符串中所有字符,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)