字符串 判断数字的个数

事情是这么个事情
输入一个字符串,有数字和非数字字符,比如a12x?sh56,连续的数字作为一个整数,依次放入一个数组a中,最后输出数字个数和所有的数字
大佬救命

#include<iostream>
#include<cstring>
using namespace std;
int main() {
    char s[100];
    int num[100], l = 0, i, f = 0, a = 0;
    cin.getline(s,100);
    int len = strlen(s);
    int len = strlen(s);
    for(i = 0; i < len; i++) {
        if(s[i] >= '0' && s[i] <= '9') {
            f = 1;
            a = a * 10 + (s[i] - '0');
        } else {
            if(f == 1) {
                num[l++] = a;
                f = 0;
                a = 0;
            }
        }
    }
    if(f == 1) {
        num[l++] = a;
    }
    cout<<l<<"个\n"<<endl;
    for(i = 0; i < l; i++) {
        cout<<num[i]<<" ";
    }
    return 0;
}

一个又臭又长的实现,还不一定正确,仅供参考:

#include <iostream>
using namespace std;

int main(){
    
    char str[256];
    
    cin>>str;
    
    int numberNums =0;  //数字个数 
    int number[100];   //存放数字的数组 
    int i = 0;   //字符串临时下标 
    int numberStart = 0;  //数字是否开始的标记 
    char num [10] ;   //数字临时存储字符数组 
    int j = 0;   //数字临时存储数组下标 
    int k = 0;  //数字数组下标 
    
    for(k=0;k<10;k++){
        num[k] = 'n';
    }
    
    
    for(k=0;k<100;k++){
        number[k] = 0;
    }
    k=0;
    
    if(str[i]>='\0'&&str[i]<='9'){
        numberStart==1;
    }else{
        numberStart=0;
    }
    
    while(str[i]!='\0'){
        
        //如果一个数字开始了 
        if(str[i]>='\0'&&str[i]<='9'&&numberStart==1){
            num[j++] = str[i];
            cout<<"数字开始:"<<str[i]<<endl;
        }
        
        if(str[i]>='\0'&&str[i]<='9'&&numberStart==0){
            num[j++] = str[i];
            numberStart=1;
            cout<<"数字开始:"<<str[i]<<endl;
        }
        
        
        
        //如果一个数字结束了 
        if((str[i]<'\0'||str[i]>'9')&&numberStart==1){
            j = 0;
            numberNums++;
            numberStart=0;
            
            int p = 1;
            for(int t=0;t<10;t++){
                if(num[t]!='n'){
                    p*=10;
                }                
            }
            p/=10;
            
            for(int t=0;t<10;t++,p/=10){
                if(num[t]!='n'){
                    
                    cout<<endl;
                    number[k]+=(num[t]-'0')*p;
                    cout<<"t="<<t<<",p="<<p<<",num["<<t<<"]="<<num[t]<<",number["<<k<<"]="<<number[k];
                    cout<<endl;
                    num[t] = 'n';
                }
            }
            
            cout<<"一个数字结束:"<<number[k]<<endl;
            k++;            
        }
        
        
        i++;    
    }
    
    //如果一个数字结束了 
    if(numberStart==1){
            j = 0;
            numberNums++;
            
            int p = 1;
            for(int t=0;t<10;t++){
                if(num[t]!='n'){
                    p*=10;
                }                
            }
            p/=10;
            
            for(int t=0;t<10;t++,p/=10){
                if(num[t]!='n'){
                    
                    cout<<endl;
                    number[k]+=(num[t]-'0')*p;
                    cout<<"t="<<t<<",p="<<p<<",num["<<t<<"]="<<num[t]<<",number["<<k<<"]="<<number[k];
                    cout<<endl;
                    num[t] = 'n';
                }
            }
            
            cout<<"一个数字结束:"<<number[k]<<endl;
    }
    
    cout<<"数字个数:"<<numberNums<<endl; 
    
    for(i=0;i<100;i++){
        if(number[i]!=0){
            cout<<number[i]<<'\t';
        }
    } 
    
    return 0;
}