2021-10-30 剑指 Offer 20. 表示数值的字符串

在这里插入图片描述

C++STL中去除前后空格的操作

s.erase(0,s.find_first_not_of(" "));//去除前导空格
s.erase(s.find_last_not_of(" ") + 1);//去除后导空格

判断一个字符是数字还是字母的方法


isalnum() 用来判断一个字符是否为英文字母或数字,相当于 isalpha(c) || isdigit(c)

isalpha() 用来判断一个字符是否是英文字母,相当于 isupper(c)||islower(c)

删除字符函数

从位置pos=10处开始删除,直到结尾
    // 删除位置的元素
    str.erase(10);
    // 从位置pos=6处开始,删除4个字符
    str.erase(6, 4);

截取字符`

//从0开始pos个
s1=s.substr(0,pos);
//从pos+1开始到最后
 s2=s.substr(pos+1);

string用法可以参考这个文章:

https://blog.csdn.net/weixin_39774682/article/details/111168146?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link
class Solution {
public:
bool isxiaoshu(string s)
{
    bool flag=true;
    bool dot=false;
    int i=0;
    if(s[i]=='+'||s[i]=='-') s=s.substr(1);
    if(s.length()==0) flag=false;  
    int j=s.length()-1;
    int k;
    for(k=i;k<=j;k++)
    {
        if(s[k]=='.')
        {
            if(dot==true)
            {
              flag=false; 
               break;
            }
            else 
            {
                dot=true;
            }

            if(k==j&&s[i]=='.')
            {
                flag=false;
                break;
            }
        }
       else if(!isdigit(s[k])) 
       {
           flag=false;
           break;
       }
    }
    return flag;

}
bool iszhengshu(string s)
{
    bool flag=true;
    int i=0;
    if(s[i]=='+'||s[i]=='-') s=s.substr(1);
    if(s.length()==0)  flag=false;   
    int j=s.length()-1;
    int k;
    for(k=i;k<=j;k++)
    {
         if(!isdigit(s[k])) 
       {
           flag=false;
           break;
       }
    }
    return flag;

}
    bool isNumber(string s) {
s.erase(0,s.find_first_not_of(" "));//去除前导空格
s.erase(s.find_last_not_of(" ") + 1);//去除后导空格
bool f=false;
int pos;
bool ans;
for(int i=0;i<s.length();i++)
{
    if(s[i]=='E'||s[i]=='e')
    {
        f=true;
        pos=i;
        break;

    }
}
if(f==false)
{
    ans=isxiaoshu(s);
}
else 
{
    string s1,s2;
    s1=s.substr(0,pos);
   // cout<<"s1 "<<s1<<endl;
    s2=s.substr(pos+1);
    //cout<<"s2 "<<s2<<endl;
    ans=isxiaoshu(s1)&&iszhengshu(s2);
}
return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值