通过C语言实现输入一个字符串,内有数字和非数字字符,如g123c456q17960? 302tab5876将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]....统计共有多少个整数,并输出这些数。并给出源码
时间: 2024-12-10 08:28:46 浏览: 40
在C语言中,你可以使用`fgets`、`sscanf`和循环来实现这个功能。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <ctype.h> // 需要用到ctype_h库中的isdigit函数检查字符是否为数字
#define MAX_DIGITS 100 // 定义最多存储的整数个数
#define MAX_NUM_LENGTH 10 // 每个整数的最大长度
typedef struct {
long long num; // 整数值
int start_index; // 数字开始的位置
} Integer;
Integer integers[MAX_DIGITS]; // 存放整数的结构体数组
int count = 0; // 计数器,记录整数的数量
void process_string(char str[]) {
int index = 0; // 当前索引
while (index < strlen(str)) {
if (isdigit(str[index])) { // 如果是数字字符
// 从当前字符开始收集数字直到遇到非数字字符
int num_length = 0;
while (index + num_length < strlen(str) && isdigit(str[index + num_length])) {
num_length++;
}
// 将收集到的数字转换成整数并放入数组
sscanf(&str[index], "%lld", &integers[count].num);
integers[count].start_index = index;
index += num_length; // 更新索引位置
count++; // 增加计数器
} else { // 遇到非数字字符
index++; // 直接跳过非数字字符
}
}
}
int main() {
char input[] = "g123c456q17960? 302tab5876";
process_string(input);
printf("共有%d个整数:\n", count);
for (int i = 0; i < count; i++) {
printf("%lld\n", integers[i].num);
}
return 0;
}
```
这段代码首先定义了一个结构体`Integer`来保存每个整数及其起始位置。`process_string`函数遍历输入字符串,识别出连续的数字并将它们存储到`integers`数组中。`main`函数打印出整数的数量以及对应的值。
阅读全文