PTA | Select Int

输入一个字符串,内有数字和非数字字符,例如:a123x67 222y35i088 09x8 c,请编写程序,将其中连续的数字作为一个整数,依次存放到一维数组a中。例如前面的字符串,应将123存放到a[0]中,67存放到a[1]中……,最后输出整数的个数以及各个整数的值。

输入格式:

长度不超过100的一个字符串,其中包含整数字符和非整数字符。

输出格式:

第一行输出整数的个数

第2行输出各个整数的值,以空格间隔,最后一个整数后面没有空格。

输入样例:

a123x67 222y35i088 09x8 c

输出样例:

7
123 67 222 35 88 9 8

代码示例:

#include<stdio.h>
#include<string.h>
int main(){
    int n=0; //数字的个数
    int cur=0;  //游标:用于字符串中控制位数
    char nums[100][100];  //用数组模拟高位数字
    char tmp;  //储存临时字符
    char tmps[100]; //储存临时字符串
    int flag=0; //标记数字结束 1表示前面的字符是数字
    tmp=getchar();
    while(tmp!=EOF){
        if(tmp>='0' && tmp<='9'){
            tmps[cur++]=tmp;
            flag=1;
        }else{
            if(flag){
                tmps[cur++]='\0';
                strcpy(nums[n++],tmps);
                cur=0;
                flag=0;
            }
        }
        tmp=getchar();
    }
    //收尾,保存最后的数字
    if(flag){
        tmps[cur++]='\0';
        strcpy(nums[n++],tmps);
        cur=0;
        flag=0;
    }
    //处理多余的0
    for(int i=0;i<n;i++){
        if(nums[i][0]=='0'){
            cur=0;
            while(nums[i][cur]=='0' && nums[i][cur+1]!='\0') cur++;
            strcpy(nums[i],nums[i]+cur);
        }
    }
    //输出结果
    printf("%d\n",n);
    if(n>=1){
        printf("%s",nums[0]);
        for(int i=1;i<n;i++){
            printf(" %s",nums[i]);
        }
    }
    return 0;
}

PTA | Select Int
https://acm.nanyan.cc/posts/23b4.html
作者
nanyan
发布于
2023年10月25日
许可协议