判断字符串是否为数字

今天电面了星环科技,被虐成渣渣,哎,本来就水,又连电面都紧张,面试官提示了我好多,可是我还是紧张到思路全乱了。其中有一道是判断字符串是否为数字,本来以为很简单,后来面试官提示才发现有各种陷阱,然后成功把自己绕晕了。。。。。希望下次有进步吧。

#include <iostream>
using namespace std;
bool isNum(char *str)
{
    //把数据分为两段进行判断,小数点之前的数据和小数点之后的数据
    int dot=-1;
    //dot标记小数点的位置
    for(int i=0;str[i]!='\0';i++)
    {
        if (str[i]=='.')
        {
            dot=i;
            break;
        }
    }
    //如果没有小数点
    if (dot==-1)
    {
        int i=0;
        while(str[i]>='0'&&str[i]<='9')
        {
            i++;
        }
        if (str[0]!='0'&&i==strlen(str))
        {
            return true;
        }
        else
            return false;

    }

    //如果有小数点
    //判断第一位和最后一位是不是小数点
    if(dot==0||dot==strlen(str)-1)
        return false;
    int start=dot+1;
    int notZero=0;
    while(str[notZero]=='0')
    {
        notZero++;
    }
    //从第一位开始,非零元素出现的位置
    if (notZero==dot&&notZero>1)
    {
        return false;
    }

    //判断小数点后面是否为数据
    while(str[start]>='0'&&str[start]<='9')
    {
        start++;
    }
    if (start==strlen(str))
    {
        return true;
    }
    else
    {
        return false;
    }
}
int main()
{
    char s[100];
    cin>>s;
    if(isNum(s))
        cout<<"It is a num "<<endl;
    else
        cout<<"It is not a num"<<endl;
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值