剑指offer系列27--表示数值的字符串

【题目】请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

  例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。

 1 package com.exe6.offer;
 2 /**【题目】
 3  * 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
 4  * 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。
 5  *  但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
 6  * @author WGS
 7  *
 8  */
 9 public class IsString {
10     int index=0;
11     public boolean isString(char[] str){
12         if(str==null || str.length<=0) return false;
13
14         int len=str.length;
15
16         //0 去除首尾空格
17         while(str[index]==‘ ‘)
18             index++;
19         if(index>=len) return false;
20         while(str[len-1]==‘ ‘)
21             len--;
22         if(len<=0) return false;
23
24         //1 判断是否正负号
25         if(str[index]==‘+‘ || str[index]==‘-‘)
26             index++;
27         if(index>=len) return false;
28         //2 判断正负号后的整数 是整数就直接跳过,不是在整数则跳到下一步;
29         scanDigits(str,index);
30         if(index==len) return true;
31         int index2=0;
32
33         //3 判断小数点后是否满足
34         if(str[index]==‘.‘){
35             index++;
36             if(index==len) return true;
37             index2 = index;
38             scanDigits(str,index);
39
40             if(index==index2) return false;//说明index没变,.后数不满足整数条件
41             if(index==len) return true;
42         }
43         //4 判断科学计数法
44         if(str[index]==‘e‘||str[index]==‘E‘){
45             index++;
46             if(index==len)
47                 return false;
48             if(str[index]==‘+‘ || str[index]==‘-‘)
49                 index++;
50             index2=index;
51             scanDigits(str,index);
52             if(index==index2) return false;//说明index没变,.后数不满足整数条件
53             if(index==len) return true;
54         }
55
56         return false;
57
58     }
59     private void scanDigits(char[] str, int i) {
60         while(i<str.length &&str[i]<=‘9‘ && str[i]>=‘0‘){
61             i++;
62             index++;
63         }
64     }
65
66     public static void main(String[] args) {
67             String s = "24.44";
68             boolean b = new IsString().isString(s.toCharArray());
69             System.out.println(b);
70     }
71
72 }
时间: 2024-10-16 11:54:15

剑指offer系列27--表示数值的字符串的相关文章

剑指offer之【表示数值的字符串】

题目: 表示数值的字符串 链接: https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?tpId=13&tqId=11206&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100",&quo

《剑指offer》:[54]表示数值的字符串

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数). 例如,字符串"+100","5e2","-123","3.1416"及"-1E-16"都表示数值,但"12e","1a3.14","1.2.3","+-5"及"12e+5.4"都不是.  分析:这个题主要是应用数字的表示通式来解决:表示一个数

剑指offer系列源码-左旋转字符串

题目1362:左旋转字符串(Move!Move!!Move!!!) 时间限制:2 秒内存限制:32 兆特殊判题:否提交:1577解决:669 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 输入: 多组测试数据,每

剑指Offer系列之题11~题15

目录 11.矩形覆盖 12.二进制中1的个数 13. 数值的整数次方 14.调整数组顺序使奇数位于偶数前面 15.链表中倒数第k个结点 11.矩形覆盖 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 斐波那契数列的应用 第一次竖着放一块类比为走一步,第一次横着放两块类比为走两步 代码与上面的斐波那契数列类题目类似,此处不再赘述:剑指Offer系列之题6~题10. 12.

【剑指offer】删除在另一个字符串中出现的字符

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27110873 剑指offer上的字符串相关题目. 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成"Thy r stdnts.". 这里主要要分析两个方面: 1.如何判断那些字符是需要删除的字符.同很多字符串问题一样,可以开辟

剑指offer系列4:斐波那契数列

剑指offer第九题,这个题很古老了.第一个想到的肯定是递归,很简单. 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 public: 6 int Fibonacci(int n) { 7 if (n == 0) 8 { 9 return 0; 10 } 11 if (n==1||n==2) 12 { 13 return 1; 14 } 15 else 16 {

剑指offer系列10:合并两个排序的链表

我拿到这个题的时候举的例子是链表1:1.3.5.7和链表2:2.4.6.8.我的思路是以:1为基础,将表2的每个结点插入表1.也就是说我一次性是要给新建立的链表中加入两个元素,分别是两个原始链表的头结点.这个思路我做了半天头脑一片混乱,中间指针实在不知道怎么弄了.于是我去睡了一觉,哈哈,我大概是这个世界上最会逃避的人了…… 看了答案使用了递归的方法,其实我做的时候我有想到要用递归,但是没用的原因是我一般写代码不喜欢用递归,原因有两个,一个是递归容易死循环,一个是递归的复杂度太高.但这道题真的太适

剑指offer(27)字符串的排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 题目分析 这题还算可以,关于全排列,有两种解法,第一种就是递归全排列法,第二种就是回溯法. 递归全排列法: 就是剑指offer上的做法,也比较容易理解,不过挺少人答的也就是 把字符串分为两部分:第一部分为第一个字符,第二部分为第一个

剑指offer系列47:堆成的二叉树

这个题的主要思路是: 用二叉树的左子树的右子树和右子树的左子树比较,再用左子树的左子树和右子树的右子树比较.(好像有点绕,但其实就是堆成的思想) 剑指offer的说法是用数的前序遍历的两个方法,前序遍历应该是:根->左->右.但是我们用另一种前序遍历:根->右->左.如果这两个序列一样就判断它是对称的. 这两个方法在实现上其实是一样的. 1 class Solution { 2 public: 3 bool isSymmetrical(TreeNode* pRoot) 4 { 5