top1编程
← 返回题目
题解

提取数字

1 条题解

  • 0
    @ 2026-8-5 14:38:11

    解题思路

    一个字符串里藏着好多数字,我们要按它们出现的顺序,一个个把它们"揪"出来。

    可以想象成:一盒混装糖果里除了糖果还有石头,我们要把糖果(数字字符)挑出来,按顺序排成一排。

    做法:

    1. 用 getline(cin, s) 读整行,因为字符串里可能有空格;
    2. 从头到尾看每一个字符;
    3. 如果这个字符是数字(在 0 到 9 之间),就直接把它输出;
    4. 不是数字的字符统统跳过。

    判断一个字符是不是数字,就看它是不是在 0 和 9 之间,写成 s[i] >= '0' && s[i] <= '9'。

    注意:输出的时候不要换行,所有数字连着输出,最后统一换行。比如样例 for(int i=0;i<5;i+=1) cout<<9; 里藏着数字 0、5、1、9,连起来就是 0519。

    参考代码

    // 提取数字:按出现顺序输出字符串中的所有数字字符
    #include <iostream>
    using namespace std;
    int main(){
        string s;
        getline(cin,s); // 字符串可能含空格,用getline读整行
        int n=s.size(); // n记录字符串长度
        for(int i=0;i<n;i++){
            if(s[i]>='0'&&s[i]<='9') cout<<s[i]; // 是数字字符就直接输出
        }
        cout<<endl;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:每个字符检查一次,长度是 n,所以是 O(n)。
    • 空间复杂度:只用了一个字符串和循环变量,额外空间是 O(1)。
    • 1