c语言编程字符串给定一个字符串,字符串由数字和大小写字母构成,请你找到并输出其中的第一个整数。如果无法找到整数,或者找到的整数超过1e9,则输出-1。 输入 一行一个字符串。 字符串长度不超过100 输出 一个整数表示结果。
时间: 2024-11-15 20:32:09 浏览: 44
在C语言中,你可以使用一个循环遍历字符串,同时检查每个字符,看是否能组成有效的整数。下面是一个解决方案,它利用了`strtol`函数来尝试解析数字,如果解析失败则返回-1。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>
#include <errno.h> // 错误码
bool is_valid_int(char* str, long long max) {
errno = 0;
long long num = strtol(str, NULL, 10); // 尝试转换为long long
if (errno == ERANGE && num > max) { // 如果溢出且大于最大值
return false;
}
if (errno == ERANGE || num < 0) { // 其他错误或负数
return false;
}
return true;
}
int find_and_output_first_integer(const char* str) {
const long long MAX_INT = 1e9; // 定义最大允许整数值
for (size_t i = 0; str[i] != '\0'; i++) {
if (isdigit(str[i]) || (isupper(str[i]) && isalpha(str[i]))) { // 只考虑字母和数字字符
char prefix[10]; // 前缀存储正在读取的部分
prefix[0] = str[i];
prefix[1] = '\0';
// 接下来的部分需要递归,因为可能有多个连续的数字
if (is_valid_int(prefix, MAX_INT)) {
while (i + 1 < strlen(str) && (isdigit(str[i + 1]) || (isupper(str[i + 1]) && isalpha(str[i + 1])))) {
prefix[1] = str[++i];
prefix[2] = '\0';
if (is_valid_int(prefix, MAX_INT)) {
continue;
} else {
break;
}
}
if (is_valid_int(prefix, MAX_INT)) {
return (int)num; // 转换回int类型并返回
}
}
}
}
return -1; // 如果找不到有效整数,返回-1
}
int main() {
char input[101];
scanf("%s", input);
int result = find_and_output_first_integer(input);
printf("%d\n", result);
return 0;
}
```
这个程序首先定义了一个`find_and_output_first_integer`函数,它从字符串开头开始搜索整数,直到找到一个或者超过1e9限制。注意,对于输入字符串中可能存在的连续的数字,我们使用递归来处理它们。
阅读全文