题目
从字符串中提取第一个整数(简单 atoi)
思路
本题从字符串里提取第一个整数(简易 atoi)。
跳过前导空白,可选处理负号;然后只要当前字符是数字,就 val = val*10 + (digit) 并后移指针;没有数字时按题面返回 0 或报错。
解题分析
跳过空白,可选符号,连续读数字字符累加 val=val*10+digit,遇非数字停。比完整 atoi 简单,不处理溢出与十六进制。
完整程序
#include <stdio.h>
#include <ctype.h>
static int simple_atoi(const char *s)
{
while (isspace((unsigned char)*s)) {
s++;
}
int sign = 1;
if (*s == '-') {
sign = -1;
s++;
} else if (*s == '+') {
s++;
}
int val = 0;
while (isdigit((unsigned char)*s)) {
val = val * 10 + (*s - '0');
s++;
}
return sign * val;
}
int main(void)
{
char line[200];
if (!fgets(line, sizeof line, stdin)) {
return 1;
}
printf("%d\n", simple_atoi(line));
return 0;
}
运行示例
输入:
-42abc输出:
-42