题目链接地址:
题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000)。
输出:
对应每个测试案例,
若输入为一个合法的字符串(即代表一个整数),则输出这个整数。
若输入为一个非法的字符串,则输出“My God”。
样例输入:
5
-5
+8
样例输出:
5
-5
8
解题思路:
只有5 ,-5,+8,-0005,+00090这些类型的字符串是合法的整数,其余的都是非法的整数。
因此合法的整数必须同时满足以下两个条件:
(1)字符串的第一个字符只能是0 ~ 9之间的数字或者正负号;
(2)字符串中第一个字符之后的字符只能是0 ~ 9之间的数字。
AC代码如下:
#include<stdio.h>
#include<string.h>
/**
* 将字符串转化为整数
* @param numberString 输入的字符串
* @param lenOfNumberString 输入字符串的长度
* @return void
*/
void stringToInt(char numberString[],int lenOfNumberString)
{
int i,start;
int sign; // 表示符号位:正数为1,负数为-1
int countOfNumber; // 用于统计输入字符串中的数字个数
int number; // 转化字符串得到的整型数
if(numberString[0] < '0' && numberString[0] > '9' && numberString[i] != '+' && numberString[i] != '-')
{
printf("My God\n");
}
else
{
start = 0;
sign = 1;
countOfNumber = 0;
number = 0;
// 如果前面有符号位,则对符号位进行处理
if('-' == numberString[0] || '+' == numberString[0])
{
if('-' == numberString[0])
sign = -1;
start++;
}
// 将字符串中的数字转化为整数
for(i = start;i < lenOfNumberString;i++)
{
if(numberString[i] >= '0' && numberString[i] <= '9')
{
number = 10 * number + (numberString[i] - '0');
countOfNumber++;
}
else
{
break;
}
}
if(i >= lenOfNumberString - 1 && countOfNumber > 0) // 表示输入的字符串是一个合法的整数
{
number = sign * number;
printf("%d\n",number);
}
else // 表示输入的字符串不是合法的整数
{
printf("My God\n");
}
}
}
int main()
{
char numberString[1000];
int lenOfNumberString;
while(gets(numberString))
{
lenOfNumberString = strlen(numberString);
stringToInt(numberString,lenOfNumberString);
}
return 0;
}
/**************************************************************
Problem: 1508
User: blueshell
Language: C
Result: Accepted
Time:0 ms
Memory:912 kb
****************************************************************/