输入一个字符串,内有数字和非数字字符,如g123c456q17960? 302tab5876将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]....统计共有多少个整数,并输出这些数。
时间: 2024-12-02 08:28:46 浏览: 0
C语言中把数字转换为字符串-sprintf
为了实现这个功能,我们可以使用C语言中的循环和字符串处理技巧。首先,我们需要遍历字符串,检查每个字符是否为数字。如果是,我们就将其添加到当前的整数值上;如果不是,我们将整数值存储到数组`a`中并开始一个新的整数计数器。同时,我们会维护一个指针来跟踪当前的数字串起始位置。
以下是一个简单的C语言程序,演示了如何完成这个任务:
```c
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main() {
char str[] = "g123c456q17960? 302tab5876";
int count = 0; // 整数计数器
int num = 0; // 当前整数值
int a[100]; // 数组用于存储整数,假设最多有100个
int index = 0; // 数组索引
for (char *ptr = str; ptr != NULL && *ptr != '\0'; ++ptr) {
if (isdigit(*ptr)) { // 检查字符是否为数字
num = num * 10 + (*ptr - '0'); // 添加数字到当前值
} else {
if (num != 0) { // 如果有非零整数,保存到数组
a[index++] = num;
count++;
}
num = 0; // 清空当前整数值
}
}
// 处理最后一个可能的整数
if (num != 0) {
a[index++] = num;
count++;
}
printf("Total integers: %d\n", count);
for (int i = 0; i < index; ++i) {
printf("a[%d]: %d\n", i, a[i]);
}
return 0;
}
```
在这个程序中,我们使用`isdigit()`函数检查字符是否为数字,`*ptr - '0'`用于转换字符到对应的数字。`index`变量用来跟踪`a`数组的位置,当遇到非数字字符时,我们检查`num`是否不为零,然后将其保存到数组并增加计数器。
运行这段代码后,它将打印出连续数字及其在数组中的位置,并显示总共有多少个整数。
阅读全文