【剑指offer】表示数值的字符串(字符串)
作者:互联网
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
链接
代码
class Solution {
public:
bool isNumeric(char* string)
{
if(string == NULL){
return false;
}
char *first = NULL, *second = NULL;
int flagE = -1;
for(int i = 0; i < strlen(string); i++){
if(string[i] == 'e' || string[i] == 'E'){
flagE = i;
}
}
if(flagE == -1){
return isNum(string);
}
else{
first = (char*)malloc(sizeof(char) * (flagE + 1));
second = (char*)malloc(sizeof(char) *(strlen(string) - flagE));
int i, j;
for(i = 0; i < flagE; i++){
first[i] = string[i];
}
first[i] = '\0';
for(i = 0, j = flagE+1; j < strlen(string); i++, j++){
second[i] = string[j];
}
second[i] = '\0';
return isNum(first) && isInt(second);
}
}
bool isNum(char* string){
if(string == NULL){
return false;
}
bool flag = true;
if(!(string[0] == '-' || string[0] == '+' || (string[0] > '0' && string[0] <= '9'))){
flag = false;
}
bool xiaoshudian = false; // 表示是否已经有小数点
for(int i = 1; i < strlen(string); i++){
if(string[i] == '.' && string[i+1] == '\0'){
flag = false;
break;
}
else if(string[i] == '.' && xiaoshudian == false){
xiaoshudian = true;
}
else if(string[i] == '.' && xiaoshudian == true){
flag = false;
break;
}
else if(string[i] >= '0' && string[i] <= '9'){
continue;
}
else{
flag = false;
break;
}
if(string[i+1] == '\0'){
break;
}
}
return flag;
}
bool isInt(char* string){
if(string == NULL){
return false;
}
bool flag = true;
if(!(string[0] == '-' || string[0] == '+' || (string[0] > '0' && string[0] <= '9'))){
flag = false;
}
for(int i = 1; i < strlen(string); i++){
if(string[i] >= '0' && string[i] <= '9'){
continue;
}
else{
flag = false;
break;
}
if(string[i+1] == '\0'){
break;
}
}
return flag;
}
};
标签:flagE,string,offer,数值,char,second,&&,字符串,first 来源: https://blog.csdn.net/u013095333/article/details/88600806