c语言现有一串以一个0或者一个负数分隔开的正整数,要求编写程序实现,找出每一段正整数中的最大值并输出,每一个最大值占一行。
时间: 2024-11-22 12:37:26 浏览: 7
c语言编写程序实现两个超长正整数(每个最长80位数字)的减法运算
在C语言中,你可以通过遍历字符串、处理每个数字段,并计算其中的最大值来实现这个功能。以下是一个简单的示例程序,它使用了`sscanf`函数解析字符串,然后分别对每个非零或负数之间的数字段求最大值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int max_in_segment(char *str) {
int num = 0;
int start = 0;
for (int i = 0; str[i]; ++i) {
if (str[i] == '0' || str[i] == '-') {
if (i > start) { // 如果找到非起始的0或负号
char *end = &str[i - 1];
num = strtol(str + start, &end, 10); // 转换到整数
if (*end != '\0') { // 检查转换是否成功
printf("%d\n", num);
start = i + 1; // 更新开始位置
}
}
if (str[i] == '-') break; // 如果遇到负号,直接跳出
}
}
// 处理最后一个数字段
if (start < strlen(str)) {
char *end = str + strlen(str);
num = strtol(str + start, &end, 10);
if (*end == '\0') {
printf("%d\n", num);
}
}
}
int main() {
char input[] = "10-20 30-40 50-60-70";
max_in_segment(input);
return 0;
}
```
这个程序首先查找第一个非零或负数的起始位置,然后读取到下一个非零或负数的位置,计算该段内的最大值并输出。注意,这个程序假设输入字符串格式规范,即每个数字段由一个0或负数分开。
阅读全文