【问题描述】输入一行字符串,含有数字和非数字字符以及空格等,如: df23adfd56 2343?23dgjop535 如果将其中所有连续出现的数字视为一个整数,要求统计在该字符串中共有多少个整数,并将这些数依次输出。 【输入文件】从当前目录下的trans.in文件中取得输入。 该文件内只有一行,含有数字和其它任意字符。该行最长含80个字符。 【输出文件】将输出打印到当前目录下的trans.out文件中。 输出文件第一行为字符串包含的整数个数,第二行依次为各个整数,各整数之间用一个空格分隔。在第二行末也要输出一个回车符。 【输入样例】 df23adfd56 2343?23dgjop535 【输出样例】5 23 56 2343 23 535 【样例说明】在字符串df23adfd56 2343?23dgjop535中有5个整数分别是 23 56 2343 23 535 【评分标准】结果正确则该测试点得满分,否则该测试点得0分。上传c语言源程序为trans.c。
时间: 2024-02-25 09:57:06 浏览: 87
以下是一个参考实现,供您参考:
```c
#include <stdio.h>
#include <ctype.h>
#define MAX_SIZE 80
int main() {
char str[MAX_SIZE + 1];
int nums[MAX_SIZE / 2], count = 0;
int i, j;
FILE *fin = fopen("trans.in", "r");
FILE *fout = fopen("trans.out", "w");
fgets(str, MAX_SIZE + 1, fin);
i = 0;
while (str[i]) {
if (isdigit(str[i])) { // 如果当前字符是数字
int num = str[i] - '0';
j = i + 1;
while (isdigit(str[j])) { // 继续向后遍历,直至非数字字符
num = num * 10 + (str[j] - '0');
j++;
}
nums[count++] = num; // 将数字存储到数组中
i = j; // 更新下一次遍历的起始位置
} else { // 如果当前字符不是数字,直接跳过
i++;
}
}
// 输出数组中存储的所有数字
fprintf(fout, "%d\n", count);
for (i = 0; i < count; i++) {
fprintf(fout, "%d ", nums[i]);
}
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}
```
该程序首先从文件中读取输入字符串,然后遍历字符串中的每个字符,如果当前字符是数字,则继续向后遍历,直至非数字字符为止,并将这些数字视为一个整数存储到数组中。最后输出数组中存储的所有数字即可。
需要注意的是,在遍历字符串时,需要使用ctype.h库中的isdigit函数判断当前字符是否是数字。此外,由于整数个数最多为字符串长度的一半,因此可以使用一个大小为MAX_SIZE / 2的数组来存储这些整数。
阅读全文