北航 2017 991 编程题第八题 从字符串中提取连续整数
程序员文章站
2022-05-25 13:56:09
...
记录一下自己考研路上做的c语言编程题目。
北航991 2017编程题第八题
题目意思是将字符串中的数字提取出来,并按照从大到小的顺序输出。
比如:"abc123de45f*#6?789&" 输出为 789,123,45,6
#include <stdio.h>
#define M 80
/**
把字符串转为整数
*/
int stoi(char *p,int n){
int a = 0,i;
for (i = 0; i<n; ++i) {
a = a*10+(*p++ - '0');
}
return a;
}
/**
采用泡排序法 将数据排序并从大到小输出
*/
void orderPao(int *a,int n){
int temp,i,j,flag=1;
for (i = n-1; i>0&&flag==1; i--) {
flag = 0;
for (j = 0; j < i; j++) {
if (a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = 1;
}
}
}
for (int k = n-1; k >= 0 ; k--) {
printf("%d ",a[k]);
}
}
int main() {
char str[M]={"abc123de45f*#6?789&"},s[M];
int a[M];
int i,j,k,l=0;
// printf("请输入一行字符串\n");
// gets(str);
for (i = 0; str[i]!='\0';i++) {
int flag = 0;
k = 0;
for (j = i;str[j]!='\0' && str[j]>=48 && str[j]<=57; j++) {
flag++;
s[k++] = str[j];
}
if (flag != 0) {
s[k]='\0';
a[l++] = stoi(s,k);
i = j;
}
}
orderPao(a,l);
}
输出结果: