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