字符串转换成整数 (bug版)

题目详情(网址http://hero.pongo.cn/home/index)
输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。
请完成函数StrToInt,实现字符串转换成整数的功能。


友情提醒:
提交代码之前,请复查下你的程序,比如当给的字符串是如左边图片所示的时候,有考虑到么?
当然,它们各自对应的正确输出如右边图片所示(假定你是在32位系统下,编译环境是VS2008以上)

input:                                          output:

                          

挑战时间:6/6/2013 9:00-11:00 

题目解析:http://blog.csdn.net/v_july_v/article/details/9024123?reload

      今天早上花了两个小时的时间实现了字符串转换为整数函数,但是平台上提交未成功,看了july的博客分析http://blog.csdn.net/v_july_v/article/details/9024123?reload,估计问题出在没有考虑数据溢出问题,先贴出基本代码,后面继续进行完善:

         测试用例都通过,思路有点不太一样

        1.首次遍历字符串中的所有字符,找出转换为整型的有效字符(数字符号等),将负号标志赋值,将可用数字存储在一个数组中(available)

           同时记录可用数字的个数(index+1)

        2.遍历数组,根据不同数字下标确定数字在整形中的位置,进行运算

        3.结合负号标志,确定返回值

int strtoint(const char *str)
{
	int length = strlen(str);
	int positive = -1; //positive or not
	int negtive = -1;
	int temp;

	int index = -1;  //index in nunmber
	int result = 0;
	char *pstr =(char*)str;

	int available[20];

	if(0==length)  //null
		return result;

	else
	{
		if(1==length)
		{
			if(*str>='0'&&*str<='9')
				{
					temp= *str-'0';
					return temp;
			    }
		}
		else
		{
			for(int i = 0;i<length;i++)
			{
				if(' '==*(pstr+i)) //kongge
				{
					if((positive==1)||(negtive==1)) //(" + 413"---0)
						return 0;
					else if(index!=-1)  //("123 456"---123)
						goto dest;
					else
					 continue;
				}
				else if(0x2b==*(pstr+i))
				{
					if(index==-1&&(positive==1))  // (" ++2"---0)
						return 0;
					else if(index==-1&&(positive==-1)) //shouge +
					   positive = 1; //positive
					else
						goto dest;
				}
				else if(0x2d==*(pstr+i))
				{
					if(index==-1&&(negtive==1))  //(" --2"=0)
						return 0;
					else if(index ==-1&&(negtive==-1))//(shouge -)
						negtive=1;
					else
						goto dest; //tiaochu cal
				}
				else if(*(pstr+i)<'0'||*(pstr+i)>'9') //meet a go to cal
					goto dest;
				else  //all number
				{
					index++;
					available[index] = *(pstr+i)-'0'; //begin from 0 index
				}

			}

		}
	}

dest:  //calculate final result
	if(index==-1) //no number in array
		return 0;
	else
	{
		for(int j = 0;j<index+1;j++)
		{
			int times = index-j;
			int multi=1;
			for(int k=0;k<times;k++)
			{
				multi = multi*10;
			}
			result +=available[j]*multi;
		}
	}
	if(negtive==1)
		return -result;
	else
		return result;
}

测试代码如下:

int main()
{
   char str[20];
    int result = 0;
	while(1)
	{
	  printf("scanf test str:\n");
	  //scanf_s("%s",&str);
	  gets_s(str);

	  if(strncmp(str,"q",1)==0)
		  break;
	  result = strtoint((const char*)str);
	  printf("result is %d\n",result);
	}
	system("pause");
	return 0;
} 


目前存在的问题:

         1.avail abe数组长度为固定长度

         2.没有检查整型溢出,确定整型溢出的判断方法和处理方式



         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值