top1编程
← 返回题目
题解

统计整数个数

1 条题解

  • 0
    @ 2026-8-5 10:29:40

    解题思路

    题目要我们数一数字符串里有几个"整数"。这里的整数就是一段连续的数字。比如 "welldone 378 and 5 and 789" 里,数字 3、7、8 连在一起组成 "378",数字 5 是 "5",数字 7、8、9 连在一起组成 "789",一共 3 个整数。

    所以这道题其实是在数"有多少段连续的数字":

    1. 用一个变量 cnt 记录整数个数,一开始是0。
    2. 用一个"光标" i 从字符串开头往右走。
    3. 如果当前字符是数字('0'~'9'),说明我们发现了一个新整数的开头,cnt 加1;然后让 i 一直往右走,把这一整段连续的数字全部跳过。
    4. 如果当前字符不是数字,就让 i 继续往右走,去找下一个数字。

    注意:因为字符串里可能有空格,读入的时候要用 getline 把一整行都读进来,而不能用 cin>>(cin 遇到空格会停下来,只能读到单词)。

    参考代码

    // 统计整数个数:数一数字符串里由连续数字组成的整数有几个
    #include <iostream>
    #include <string>
    using namespace std;
    int main(){
        string s;
        getline(cin,s);        // 整行读入(字符串里可能含空格)
        int cnt=0;
        for(int i=0;i<s.size();i++){
            if(s[i]>='0'&&s[i]<='9'){   // 发现一个数字开头
                cnt++;                  // 整数个数加1
                while(i<s.size()&&s[i]>='0'&&s[i]<='9') i++; // 跳过这串连续数字
            }
        }
        cout<<cnt<<'\n';
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(L),L 是字符串长度(不超过500)。字符串里的每个字符最多被 i 走过一次,i 只会往前走、绝不回头。
    • 空间复杂度:O(L),用来存这个字符串。
    • 1