输入一个字符串,内有数字和非数字字符,例如:A123x456 17960? 302tab5876
将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[o],456放在a[1]……统计共有多少个整数,并输出这些数。
#include <stdio.h>
int main() {
char str[30];
int a[30], cnt = 0, d = 0, sum = 0, i = 0, j = 0;
gets(str);
while (str[i] != '\0') {
if(str[i] >= '0' && str[i] <= '9'){
d = str[i] - '0';//将字符转为数字
sum = sum * 10 + d;
} else {
if(sum != 0) {//考虑开头为非数字
cnt++;
a[j++] = sum;
}
sum = 0;
}
i++;
}
// 考虑到数字位于最后
if(sum != 0) {
cnt++;
a[j++] = sum;
}
for (int k = 0; k < j; ++k) {
printf("%d ", a[k]);
}
return 0;
}
第二种:指针
#include <stdio.h>
int main( )
{
char str[80], *p;
int arr[80];
int flag = 0, a = 0, cnt = 0, i = 0;
gets(str);
p = str;
while (*(p+i)!='\0') {
if(*(p+i) >= '0' && *(p+i) <= '9') {
a = *(p+i) - '0' + a * 10;
flag = 0;
} else {
flag = 1;//1为非数字,0为数字
}
if(flag && i != 0 && a != 0 || *(p+i+1) == '\0') {//i表示非数字在开头的情况,a表示数字总和不能为0,最后考虑数字在末尾
arr[cnt] = a;
a = 0;
cnt++;
}
i++;
}
for (int j = 0; j < cnt; ++j) {
printf("%d ", arr[j]);
}
return 0;
}
运行结果