把字符串转换成整数

本文介绍了一个用于将字符串转换为整数的C/C++函数实现。该实现考虑了字符串中的正负号,并通过检查每个字符确保只处理有效的数字字符。此外,还提供了溢出检查以避免数值超出范围。附带的测试函数验证了不同输入情况下的函数行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bool g_Invalid = true;
long long strToIntCore(const char* str, bool minus)
{
	long long num = 0;
	while(*str != '\0')
	{
		if(*str >= '0' && *str <= '9')
		{
			int flag = minus ? -1 : 1;
			num = num * 10 + flag * (*str - '0');
			if((!minus && num > 0x7FFFFFFF) ||(minus && num < (signed int)0x80000000) )
			{
				num = 0;
				break;
			}
			str++;
		}else
		{
			num = 0;
			break;
		}
	}

	if(*str == '\0')
		g_Invalid = false;

	return num;
}

int strToInt(const char* str)
{
	long long num = 0;
	if(str != NULL && *str != '\0')
	{
		bool minus = false;
		if(*str == '+')
			str++;
		else if(*str == '-')
		{
			str++;
			minus = true;
		}
		if(*str != '\0')
			num = strToIntCore(str,minus);
	}
	return (int)num;
}

// ====================测试代码====================
void Test(char* string)
{
    int result = strToInt(string);
    if(result == 0 && g_Invalid == true)
        printf("the input %s is invalid.\n", string);
    else
        printf("number for %s is: %d.\n", string, result);
}

int main(int argc, char* argv[])
{
    Test(NULL);

    Test("");

    Test("123");

    Test("+123");
    
    Test("-123");

    Test("1a33");

    Test("+0");

    Test("-0");

    //有效的最大正整数, 0x7FFFFFFF
    Test("+2147483647");    

    Test("-2147483647");

    Test("+2147483648");

    //有效的最小负整数, 0x80000000
    Test("-2147483648");    

    Test("+2147483649");

    Test("-2147483649");

    Test("+");

    Test("-");

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值