输入一个字符串,内有数字和非数字字符,例如: A123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。
方法一:数组版
#include <stdio.h>
void fun01(char str[], int a[], int *n) {
//s:数字累计和 k:模拟a数组下标
int i, s, k = 0;
for (i = 0; str[i]; i++) {
s = 0;
while (str[i] >= '0' && str[i] <= '9') s = s * 10 + str[i] - '0', i++;
if (s != 0) a[k++] = s;//如果是数字和就不为0
}
*n = k;
}
main(){
char str[100] = "A123x456 17960? 302tab5876";
int a[30], i, n;//n:数字个数
fun01(str, a, &n);
printf("一共有%d个整数,分别为:\n", n);
for (i = 0; i < n; i++) printf("%d ", a[i]);
}
方法二:指针版
#include <stdio.h>
void fun02(char *s, int *a, int *n) {
int i = 0, sum;//i:模拟a数组的下标 sum:数字和
while (*s) {
sum = 0;
while (*s >= '0' && *s <= '9') sum = sum * 10 + *s - '0', s++;//s++:指针后移继续找数字
s++;
if (sum != 0) *(a + i) = sum, i++;//找到第一个数字放到a数组第一个位置,i++准备好下一次存放数字的下标
}
*n = i;
}
main() {
char str[100] = "A123x456 17960? 302tab5876";
int a[30], i, n;//n:数字个数
fun02(str, a, &n);
printf("一共有%d个整数,分别为:\n", n);
for (i = 0; i < n; i++) printf("%d ", a[i]);
}