已知一个字符串表示一个实数(不超过100位),请输出其整数部分。输出不含前导0,但如果整数部分0,则输出0。 提示:可使用strchr()函数查找给定字符。用C语言写
时间: 2024-10-21 16:07:06 浏览: 30
从键盘输入一个三位整数,逆序输出。如输入123,输出321。
在C语言中,可以使用`strtol()`函数和`strchr()`函数配合来提取整数部分。这里是一个简单的示例,假设输入的字符串已经在变量`input_str`中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Function to extract the integer part of a string representation of a number
char* extract_integer(const char* input_str) {
int sign = 1; // Check for negative sign
if (input_str[0] == '-') {
sign = -1;
++input_str; // Skip the '-'
}
char* end_ptr = NULL; // Pointer to the end of the whole number
long long num = strtoll(input_str, &end_ptr, 10); // Convert string to long long
// If no non-digit characters found after the first digit or the entire input is not a number
if (*end_ptr == '\0' || *end_ptr == '.') {
return (sign > 0 && num == LLONG_MIN) ? "0" : "0LL"; // Handle special case where it's just "-"
} else if (num == 0 && strchr(end_ptr, '.') != NULL) { // Special case when there's only a decimal point
return "0";
}
// Trimming leading zeros and format as string
char result[50]; // Assuming no more than 9 digits in integer part
snprintf(result, sizeof(result), "%lld", num);
while (result[0] == '0') {
result++; // Move pointer to remove leading zeros
}
if (result[0] == '-') {
result++; // Remove '-' if present
}
return result;
}
int main() {
const char* input = "123.456"; // Example input
char* integer_part = extract_integer(input);
printf("Integer part: %s\n", integer_part);
free(integer_part); // Don't forget to free the memory allocated by `strtol`
return 0;
}
```
在这个程序中,我们首先检查字符串是否以负号开始,并处理这种情况。然后,尝试将字符串转换为`long long`类型的数值。如果转换成功并且没有找到非数字字符,那么就返回这个数值;如果有非数字字符,如小数点或额外的零,我们会特殊处理。
最后,我们创建一个新的字符串结果,去掉多余的零并格式化为只包含整数部分的形式。注意,这个程序假定输入字符串最多有99个有效数字加上一个小数点,实际应用中可能需要更严格的边界检查。
阅读全文