题目

牛牛得到了一个字符串(可能含有空格),他希望在这些字符串中提取出数字。
例如:a1b23c456d007890 中可以提取出 1、23、456、7890 共4个数字。

现在,他得到了一个长度高达 1000 的字符串,请你帮他提取出所有的数字。

本题有多组数据。
输出提取出的所有数字,相邻两个数字用一个空格隔开。
不包含数字的时候输出空行。
注意,输出的数不能含有前导 0。

解题思路

遍历字符串的每个字符。
如果遇到了字符是数字的话,先判断是不是 0。

  • 如果是 0,继续向后遍历,直到出现其他数字,直接输出数字;如果没有遇到其他数字,而是非数字字符,则输出 0。
  • 如果是其他数字,直接输出数字,直到遇到非数字字符。

C++代码

#include<iostream>
using namespace std;

int main(){
    string s;
    while(getline(cin,s)){
        int i=0;
        while(i<s.size()){
            if(s[i]>='0' && s[i]<='9'){
                while(s[i]=='0') ++i;
                bool flag = false;
                while(s[i]>='0' && s[i]<='9'){
                    cout << s[i];
                    ++i;
                    flag = true;
                }
                if(!flag)
                    cout << "0";
                cout << " ";
            }
            ++i;
        }
        cout << endl;
    }
}