#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
/**
* @param s 字符串
* @return 整型
*/
int myAtou(char* s) {
if (s == NULL) return 0;
int i = 0;
int sign = 1;
long result = 0; // 用 long 来检测溢出
// 1. 跳过前导空格
while (s[i] == ' ') {
i++;
}
// 2. 检查正负号
if (s[i] == '-' || s[i] == '+') {
sign = (s[i] == '-') ? -1 : 1;
i++;
}
// 3. 转换数字直到非数字字符
while (s[i] >= '0' && s[i] <= '9') {
result = result * 10 + (s[i] - '0');
// 检查溢出
if (sign == 1 && result > INT_MAX) {
return INT_MAX;
}
if (sign == -1 && -result < INT_MIN) {
return INT_MIN;
}
i++;
}
return (int)(sign * result);
}
// 测试函数
int main() {
// 测试用例1
printf("测试用例1: s = \"42\"\n"); printf("实际输出: %d\n\n", myAtou
("42"));
// 测试用例2
printf("测试用例2: s = \"-42\"\n"); printf("实际输出: %d\n\n", myAtou
("-42"));
// 测试用例3
printf("测试用例3: s = \"4193 with words\"\n"); printf("实际输出: %d\n\n", myAtou
("4193 with words"));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bGltaXRzLmg+CgovKioKICogQHBhcmFtIHMg5a2X56ym5LiyCiAqIEByZXR1cm4g5pW05Z6LCiAqLwppbnQgbXlBdG91KGNoYXIqIHMpIHsKICAgIGlmIChzID09IE5VTEwpIHJldHVybiAwOwogICAgCiAgICBpbnQgaSA9IDA7CiAgICBpbnQgc2lnbiA9IDE7CiAgICBsb25nIHJlc3VsdCA9IDA7IC8vIOeUqCBsb25nIOadpeajgOa1i+a6ouWHugogICAgCiAgICAvLyAxLiDot7Pov4fliY3lr7znqbrmoLwKICAgIHdoaWxlIChzW2ldID09ICcgJykgewogICAgICAgIGkrKzsKICAgIH0KICAgIAogICAgLy8gMi4g5qOA5p+l5q2j6LSf5Y+3CiAgICBpZiAoc1tpXSA9PSAnLScgfHwgc1tpXSA9PSAnKycpIHsKICAgICAgICBzaWduID0gKHNbaV0gPT0gJy0nKSA/IC0xIDogMTsKICAgICAgICBpKys7CiAgICB9CiAgICAKICAgIC8vIDMuIOi9rOaNouaVsOWtl+ebtOWIsOmdnuaVsOWtl+Wtl+espgogICAgd2hpbGUgKHNbaV0gPj0gJzAnICYmIHNbaV0gPD0gJzknKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAgKyAoc1tpXSAtICcwJyk7CiAgICAgICAgCiAgICAgICAgLy8g5qOA5p+l5rqi5Ye6CiAgICAgICAgaWYgKHNpZ24gPT0gMSAmJiByZXN1bHQgPiBJTlRfTUFYKSB7CiAgICAgICAgICAgIHJldHVybiBJTlRfTUFYOwogICAgICAgIH0KICAgICAgICBpZiAoc2lnbiA9PSAtMSAmJiAtcmVzdWx0IDwgSU5UX01JTikgewogICAgICAgICAgICByZXR1cm4gSU5UX01JTjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaSsrOwogICAgfQogICAgCiAgICByZXR1cm4gKGludCkoc2lnbiAqIHJlc3VsdCk7Cn0KCi8vIOa1i+ivleWHveaVsAppbnQgbWFpbigpIHsKICAgIC8vIOa1i+ivleeUqOS+izEKICAgIHByaW50Zigi5rWL6K+V55So5L6LMTogcyA9IFwiNDJcIlxuIik7CiAgICBwcmludGYoIuacn+acm+i+k+WHujogNDJcbiIpOwogICAgcHJpbnRmKCLlrp7pmYXovpPlh7o6ICVkXG5cbiIsIG15QXRvdSgiNDIiKSk7CiAgICAKICAgIC8vIOa1i+ivleeUqOS+izIKICAgIHByaW50Zigi5rWL6K+V55So5L6LMjogcyA9IFwiLTQyXCJcbiIpOwogICAgcHJpbnRmKCLmnJ/mnJvovpPlh7o6IC00MlxuIik7CiAgICBwcmludGYoIuWunumZhei+k+WHujogJWRcblxuIiwgbXlBdG91KCItNDIiKSk7CiAgICAKICAgIC8vIOa1i+ivleeUqOS+izMKICAgIHByaW50Zigi5rWL6K+V55So5L6LMzogcyA9IFwiNDE5MyB3aXRoIHdvcmRzXCJcbiIpOwogICAgcHJpbnRmKCLmnJ/mnJvovpPlh7o6IDQxOTNcbiIpOwogICAgcHJpbnRmKCLlrp7pmYXovpPlh7o6ICVkXG5cbiIsIG15QXRvdSgiNDE5MyB3aXRoIHdvcmRzIikpOwogICAgCiAgICByZXR1cm4gMDsKfQ==