日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断一个字符串是否是数值

發(fā)布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断一个字符串是否是数值 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

劍指 Offer 20. 表示數(shù)值的字符串

難度中等193收藏分享切換為英文接收動態(tài)反饋

請實現(xiàn)一個函數(shù)用來判斷字符串是否表示數(shù)值(包括整數(shù)和小數(shù))。

數(shù)值(按順序)可以分成以下幾個部分:

  • 若干空格
  • 一個?小數(shù)?或者?整數(shù)
  • (可選)一個?'e'?或?'E'?,后面跟著一個?整數(shù)
  • 若干空格
  • 小數(shù)(按順序)可以分成以下幾個部分:

  • (可選)一個符號字符('+'?或?'-')
  • 下述格式之一:
  • 至少一位數(shù)字,后面跟著一個點?'.'
  • 至少一位數(shù)字,后面跟著一個點?'.'?,后面再跟著至少一位數(shù)字
  • 一個點?'.'?,后面跟著至少一位數(shù)字
  • 整數(shù)(按順序)可以分成以下幾個部分:

  • (可選)一個符號字符('+'?或?'-')
  • 至少一位數(shù)字
  • 部分數(shù)值列舉如下:

    • ["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]

    部分非數(shù)值列舉如下:

    • ["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]

    ?

    示例 1:

    輸入:s = "0" 輸出:true

    示例 2:

    輸入:s = "e" 輸出:false

    示例 3:

    輸入:s = "." 輸出:false

    示例 4:

    輸入:s = "????.1??" 輸出:true

    提示:

    • 1 <= s.length <= 20
    • s?僅含英文字母(大寫和小寫),數(shù)字(0-9),加號?'+'?,減號?'-'?,空格?' '?或者點?'.'?。

    C++代碼

    具體原理見程序

    class Solution {//符號 出現(xiàn)位置限制 出現(xiàn)次數(shù)//小數(shù)點. 不能出現(xiàn)在e或E后面 不能出現(xiàn)在末尾,必須緊跟著數(shù)字 只能出現(xiàn)一次 //+ - 只能出現(xiàn)在開頭或者e或E的后面 最多兩次//e E 前面必須是數(shù)字 后面必須是= - 或數(shù)字 只能出現(xiàn)一次 public: //去掉字符串首尾空格void trim(string& str){str.erase(0, str.find_first_not_of(" \t")); // 去掉頭部空格str.erase(str.find_last_not_of(" \t") + 1); // 去掉尾部空格}bool isNumber(string s) {if(s.empty()) return false;//去掉前面的空格trim(s);bool numFlag = false;bool dotFlag = false;bool eFlag = false;for(int i = 0; i < s.size(); i++){//如果當(dāng)前位置是數(shù)字 則numFlag變?yōu)閠rueif(isdigit(s[i])) numFlag = true;//如果當(dāng)前位置是小數(shù)點 則需要前面沒出現(xiàn)過小數(shù)點 并且沒有出現(xiàn)過e|Eelse if(s[i] == '.' && !dotFlag && !eFlag){if(i != (s.size() - 1) && !numFlag && (s[i+1] == 'e' || s[i+1] == 'E')) return false;//".e3"dotFlag = true;}//如果當(dāng)前位置出現(xiàn)的是e|E 則需要前面沒出現(xiàn)過e|E 并且不能出現(xiàn)在首位else if(i != 0 && (s[i] == 'e' || s[i] == 'E') && !eFlag && numFlag){//s[i] == 'e' || s[i] == 'E' 需要加括號eFlag = true;numFlag = false;//為了避免123e這種請求,出現(xiàn)e之后就標(biāo)志為false}//如果出現(xiàn)的是+- 則只能出現(xiàn)在開頭 或者緊接著e|Eelse if((s[i] == '+' || s[i] == '-') && (i == 0 || s[i - 1] == 'e' || s[i - 1] == 'E')){//這里不需要執(zhí)行 只需要滿足這個情況時 不false就行}//其他字符或其他情況都非法elsereturn false; }//循環(huán)遍歷之后沒有false 則只要字符串中存在數(shù)字 則正確 故返回numFlagreturn numFlag;} };

    ?

    總結(jié)

    以上是生活随笔為你收集整理的判断一个字符串是否是数值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。