Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าสตริงเป็นตัวเลขที่ถูกต้องหรือไม่ใน C++

แนวคิด

ตรวจสอบว่าสตริงที่กำหนดเป็นตัวเลขที่ถูกต้อง (numeric) หรือไม่

ตัวอย่าง: - "12.5" → true - "def" → false - "2e5" → true - "10e4.4" → false

กรณีที่ต้องจัดการ

  • ข้าม whitespace นำหน้าและท้ายสตริง
  • ข้าม '+', '-', '.' ที่ต้นสตริง
  • ตัวอักษรต้องอยู่ในเซต {+, -, ., e, 0-9} เท่านั้น
  • ไม่มี '.' หลัง 'e'
  • '.' ต้องตามด้วยตัวเลข
  • 'e' ต้องตามด้วย '+', '-', หรือตัวเลข

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
#include <iostream>
using namespace std;

int valid_number1(string str1){
    int i = 0, j = str1.length() - 1;
    while (i < str1.length() && str1[i] == ' ') i++;
    while (j >= 0 && str1[j] == ' ') j--;
    if (i > j) return 0;
    if (i == j && !(str1[i] >= '0' && str1[i] <= '9')) return 0;
    if (str1[i] != '.' && str1[i] != '+' && str1[i] != '-' && !(str1[i] >= '0' && str1[i] <= '9')) return 0;
    bool flagDotOrE = false;
    for (i; i <= j; i++) {
        if (str1[i] != 'e' && str1[i] != '.' && str1[i] != '+' && str1[i] != '-' && !(str1[i] >= '0' && str1[i] <= '9'))
            return 0;
        if (str1[i] == '.') {
            if (flagDotOrE == true) return 0;
            if (i + 1 > str1.length()) return 0;
            if (!(str1[i + 1] >= '0' && str1[i + 1] <= '9')) return 0;
        } else if (str1[i] == 'e') {
            flagDotOrE = true;
            if (!(str1[i - 1] >= '0' && str1[i - 1] <= '9')) return 0;
            if (i + 1 > str1.length()) return 0;
            if (str1[i + 1] != '+' && str1[i + 1] != '-' && !(str1[i + 1] >= '0' && str1[i + 1] <= '9'))
                return 0;
        }
    }
    return 1;
}

int main(){
    char str1[] = "0.1e10";
    if (valid_number1(str1))
        cout << "true";
    else
        cout << "false";
    return 0;
}

ผลลัพธ์

true