• 数字字符串转换为数字


        这是某一年C的二级考试题,想起来了便做一做。
    要求是这样的;自己写一个转换函数,将一个数字字符串转换为数字!
        此方法可将一个数字字符串转换为数字,非数字字符串将返回0,按从左到右的顺序截取,遇到非数字字符则停止截取。
    如:
    "-1234" -->1234
    "+1234." -->1234
    "abc1234" -->0
    "123ab234" -->123
    "123.234" -->123.234

    此方法使用纯C代码实现,如果用正则表达式验证代码将会更精简。

    float StringToNumber(char *strIpt)
    {
        
    /*提取出有效格式的数字符串*/
        
    int numLen=0;
        
    bool isDot =false//是否出现过小数点
        for(int i=0;strIpt[i]!='\0';i++)
        
    {//验证字符串格式正确性
            if(numLen==0)
            
    {
                
    if(strIpt[i]=='+'||strIpt[i]=='-'||(strIpt[i]>='0'&&strIpt[i]<='9'))
                
    {
                    
    if((strIpt[i]=='+'||strIpt[i]=='-')&&!(strIpt[i+1]>='0'&&strIpt[i+1]<='9'))
                    
    {
                        
    break;
                    }

                    numLen
    ++;
                }

                
    else
                
    {
                    
    break;
                }

            }

            
    else if((strIpt[i]>='0'&&strIpt[i]<='9')||strIpt[i]=='.')
            
    {
                
    if(strIpt[i]=='.')
                
    {
                    
    if(isDot)
                    
    {
                        
    break;
                    }

                    
    else
                    
    {
                        isDot
    =true;
                    }

                }

                numLen
    ++;
            }

            
    else
            
    {
                
    break;
            }

        }

        
    if(strIpt[numLen-1]=='.')numLen--;//如果最后一位是点的话则去除
        if(numLen==0)return 0.0;
        
        
    /*开始转换*/
        
    int flag=1//1正数,-1负数
        isDot=false;
        
    float dRetn = 0.0;
        
    float sdLen=10.0f//小数部份位数
        for(int i=0;i<numLen;i++)
        
    {
            
    if(strIpt[i]=='-' || strIpt[i]=='+')
            
    {
                
    if(strIpt[i]=='-')flag=-1;
            }

            
    else if(strIpt[i]=='.')
            
    {
                isDot
    =true;
                
    continue;
            }

            
    else if(isDot)
            
    {
                dRetn
    =dRetn+(strIpt[i]-'0')/sdLen;
                sdLen
    *=10;
            }

            
    else
            
    {
                dRetn
    =dRetn*10+(strIpt[i]-'0');
            }

        }

        
    return dRetn*flag;
    }


     

  • 相关阅读:
    android matrix
    canvas变换
    Gradle常用命令
    android View实现变暗效果
    常用设计模式
    Android无埋点数据收集SDK关键技术
    如何打开小米,oppo,华为等手机的系统应用的指定页面
    Android 性能优化
    SpringBoot入坑-请求参数传递
    SpringBoot入坑-配置文件使用
  • 原文地址:https://www.cnblogs.com/mondol/p/1017652.html
Copyright © 2020-2023  润新知