oral_quiz->#Str2Int#

本文介绍了一个C++程序,该程序能够将字符串形式的数字转换为整数,并处理包括正负号在内的各种情况。通过一系列测试用例验证了转换功能的有效性和边界条件处理。
#include <stdio.h>
#include <string>

enum Status { kValid = 0, kInvalid };
int g_nStatus = kValid;

long long Str2IntCore(const char* digit, bool minus);
int Str2Int(const char* str) {
	g_nStatus = kInvalid;
	long long num = 0;

	if(str != NULL && *str != '\0') {
		bool minus = false;
		if(*str == '+')
			str++;
		else if(*str == '-') {
			minus = true;
			str++;
		}

		if(*str != '\0')
			num = Str2IntCore(str, minus);
	}

	return (int)num;
}

long long Str2IntCore(const char* digit, bool minus) {
	long long num = 0;

	while(*digit != '\0') {
		if(*digit >= '0' && *digit <= '9') {
			int flag = minus ? -1 : 1;
			num = num*10 + flag*(*digit - '0');

			if((!minus && num > 0x7FFFFFFF) || (minus && num < (signed int)0x80000000)) {
				num = 0;
				break;
			}

			digit++;
		}
		else {
			num = 0;
			break;
		}
	}

	if(*digit == '\0')
		g_nStatus = kValid;

	return num;
}

void Test(const char* testName, const char* str, int expected) {
	if(testName != NULL)
		printf("%s begins: ", testName);

	if(expected == Str2Int(str))
		printf("passed.\n");
	else
		printf("failed.\n");

	printf("g_nStatus: %d\n", g_nStatus);
}

//positive
void Test1() {
	char* str = "7865";
	Test("Test1", str, 7865);
}

//negative
void Test2() {
	char* str = "-7865";
	Test("Test2", str, -7865);
}

//NULL
void Test3() {
	Test("Test3", NULL, 0);
}

//""
void Test4() {
	char* str = "";
	Test("Test4", str, 0);
}

//Invalid
void Test5() {
	char* str = "+8j7";
	Test("Test5", str, 0);
}

//beyond
void Test6() {
	char* str = "5463728392";
	Test("Test6", str, 0);
}

int main(int argc, char* argv[]) {
	Test1();
	Test2();
	Test3();
	Test4();
	Test5();
	Test6();

	return 0;
}



转载于:https://my.oschina.net/ITHaozi/blog/283383

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值