1.需求描述输入一个由数字组成的字符串,编写程序将字符串转为整数并输出。例如输入字符串为“12345”,则输出整数为12345。注意,不要使用C语言的库函数atoi。2.算法设计我们都知道,如果给定一个整数123,那么它的表示方法就是:123=1*100+2*10+3。换句话说,一个整数是由它的数位上的数字按照位数的和组成的。所以这个需求的解决方法很简单,就是把字符串中的数字按照他们的位数相加即可。在这个过程中,有一些特殊情况需要考虑。程序总体流程如图1所示。图1程序总体流程3.特殊流程注意事项在编写程序的过程中,我们需要考虑输入的一串数字的长度和格式,比如:1.如果输入的字符串中包含除数字以外的其他字符,则程序直接返回,不做后续处理。2.如果数字串以一个或多个字符0开头,则必须在后续处理之前将其删除。3、因为在C语言中,一个整数(int)所能表示的最大数是2147483647,所以如果输入的数字串大于“2147483647”,程序直接返回,不做后续处理。4.程序代码/***************************************************************************Copyright(C)2016,ZhouZhaoxion.**文件名:StrToInt.c*文件ID:无*内容概要:字符串转整数*其他说明:例如“123”转123*当前版本:V1.0*作者:周兆雄*完成日期:20160218*****************************************************************************/#include#include//因为代码中使用了INT_MAX,所以Include这个头文件//重新定义数据类型typedefsignedcharINT8;typedefintINT32;typedefunsignedintUINT32;//函数声明INT32CalIntVal(INT32iBitLen);INT32JudgeIfOverFlow(INT8*pszTestStr);/*******************************************************************************函数说明:主函数*输入参数:无*输出参数:无*返回值:0-执行成功其他-执行失败*其他说明:无*修改日期版本号修改内容*-------------------------------------------------------------------*20160218V1.0周兆雄创建****************************************************************************/INT32main(){INT8szInputStr[100]={0};INT8szTestStr[100]={0};INT32iResultInt=0;//转换后的整数***支持2147483647UINT32iPosFlag=0;UINT32iTestStrLen=0;UINT32iBitVal=0;INT32iRetVal=0;printf("Maxvalueofintis%d\n",INT_MAX);//求int的最大值printf("Pleaseinputthestring:\n");scanf("%s",szInputStr);printf("InputStr=%s\n",szInputStr);//判断输入字符串中是否有非数字字符,如果有,直接退出for(iPosFlag=0;iPosFlag'9'){printf("%sisnotadigitalstring,pleasecheck!\n",szInputStr);return-1;}}//如果字符串前面有字符0,则去掉iPosFlag=0;while(szInputStr[iPosFlag]=='0'){iPosFlag++;}//获取去掉0后的字符串值strncpy(szTestStr,szInputStr+iPosFlag,strlen(szInputStr)-iPosFlag);//判断字符串是否大于2147483647,如果大于则直接退出iRetVal=JudgeIfOverFlow(szTestStr);if(iRetVal!=0){printf("%sisbiggerthanINT_MAX(2147483647),pleasecheck!\n",szTestStr);return-1;}//计算字符串对应的整数值iTestStrLen=strlen(szTestStr);iResultInt=0;for(iPosFlag=0;iPosFlagstrlen(szMaxValOfInt))//长度超过{return1;}elseif(iTestStrLen==strlen(szMaxValOfInt))//长度等于{if(strcmp(pszTestStr),szMaxValOfInt))>0)//溢出{return1;}else{return0;}}else//测试字符串长度少比“2147483647”的长度,不会溢出{return0;}}/******************************************************************************功能说明:查找对应的整数值字符串中的每一位*输入参数:iBitLen-对应整数的个数*输出参数:无*返回值:该位对应的整数值*其他说明:无*修改日期版本号修改人修改内容*----------------------------------------------------------------*20160218V1.0ZhouZhaoxiong创建*****************************************************************************/INT32CalIntVal(INT32iBitLen){if(iBitLen==1)//单位{return1;}else{return10*CalIntVal(iBitLen-1);}}五、程序测试我们将编写好的程序“StrToInt.c”上传到Linux机器上,使用“gcc-g-oStrToIntStrToInt.c”命令编译程序,生成“StrToInt”文件来测试程序详细。1.输入字符串为“12345”时,程序运行情况如下:Maxvalueofintis2147483647Pleaseinputthestring:12345InputStr=12345ResultInt=123452.输入字符串为“-12345”时,程序运行情况如下:Maxvalueofintis2147483647Pleaseinputthestring:-12345InputStr=-12345-12345isnotadigitalstring,pleasecheck!3.输入字符串为“123456a”时,程序运行情况如下:Maxvalueofintis2147483647Pleaseinputthestring:123456aInputStr=123456a123456aisnotadigitalstring,pleasecheck!4.输入字符串为“012345”时,程序运行情况如下:Maxvalueofintis2147483647Pleaseinputthestring:012345InputStr=012345ResultInt=123455.输入字符串为“0123450”时,程序运行情况如下:Maxvalueofintis2147483647Pleaseinputthestring:0123450InputStr=0123450ResultInt=1234506.输入字符串为“2147483647”时,程序运行情况如下:Maxvalueofintis2147483647Pleaseinputthestring:2147483647InputStr=2147483647ResultInt=21474836477.输入字符串为“2147483648”,theprogramrunsasfollows:Maxvalueofintis2147483647Pleaseinputthestring:2147483648InputStr=21474836482147483648isbiggerthanINT_MAX(2147483647),please查看!8、当输入字符串为“123456789012”时,程序运行如下:Maxvalueofintis2147483647Pleaseinputthestring:123456789012InputStr=123456789012123456789012isbiggerthanINT_MAX(2147483647),程序可以正确处理几种特殊情况,请检查!,需求扩展基于本文的需求和流程,我们可以考虑对需求进行如下扩展:1.输入的字符串不仅限于数字,还可以包含“+”或“-”开头。如果字符串以“+”开头,则整数输出为正整数;如果字符串以“-”开头,则整数输出为负整数。2、如果输入的数字字符串大于“2147483647”,程序会直接输出整数值为2147483647。【本文为专栏作家周兆雄原创文章,作者微信公众号:周氏逻辑(logiczhou)】点此阅读作者更多好文