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