1.正则表达式匹配
实现一个函数来匹配带.和“※”的正则表达式,其中,.可以表示任意一个字符,而“※”表示它前面的字符可以出现任意次(包括0),例如a.a与ab※ac※a都与aaa匹配。
思路:
首先判断第二个字符是不是※,如果不是,就一位一位的比较,如果是,分两种情况:第一种,第一个字符二者是相等的,那么下一步可以从这三个选择:(str+1,pattern+2,aaa,aa※a),(str+1,pattern,aaa,a※a),(str,pattern+2,aaa,aa※aaa)第二张,第一个字符二者不相等,那么直接进行(str,pattern+2)。

2.表示数值的字符串
判断一个字符串是否表示数值,例如:"+100","5e2","-123","3.1416","-1E-1"都表示数值。
思路:
整数可能是以‘+’或‘—’开头的0-9的数位串,小数部分是0-9的无符号数位串,指数部分也是以‘+’或‘—’开头的0-9的数位串。因此从头开始扫描,先整数,遇.开始扫描小数,遇“e”或“E”表开始扫描指数。

bool isNumeric(const char* str)
{
    if(str==nullptr)
    return false;
    bool numeric=scanInteger(&str);
    if(*str=='.')
    {
        ++str;
        numeric=scanUnsignedInteger(&str)||numeric;//小数前后可以没有整数233.或.233合法
    }
    if(*str=='e'||*str=='E')
    {
        ++str;
        numeric=scanInteger(&str)&&numeric;//指数前后需要有整数e6,1e是不合法的
    }
    return numeric&&str=='\0';
}
bool scanUnsignedInteger(const char** str)
{
    const char* before=*str;
    while(**str!='\0'&&**str>'0'&&**str<=9)
    {
        ++(*str);
    }
    return *str>before;
}
bool scanInteger(const char** str)
{
    if(**str=='+'||**str=='-')
      ++(*str);
    return scanUnsignedInteger(str);
}