题目

从字符串中提取第一个整数(简单 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