/* 识别数值 */

else if (nowC >= '0' && nowC <= '9') { charIndex = 0; value = 0; int num = 0; int eNum = 0; int lENum = 0; value = value * 10 + nowC - '0'; word[charIndex++] = nowC; nowC = GetACharacterFromFile(); if (nowC == 'x') { do { word[charIndex++] = nowC; nowC = GetACharacterFromFile(); if (nowC >= '0' && nowC <= '9') { num = nowC - '0'; } else if (nowC >= 'A' && nowC <= 'F') { num = nowC - 'A'; } value = 16 * value + num; } while ((nowC >= '0' && nowC <= '9' || nowC >= 'A' && nowC <= 'F') && nowC != EOF); } else if (nowC == 'o') { do { word[charIndex++] = nowC; if (nowC >= '0' && nowC <= '7') { value = 8 * value + nowC - '0'; } nowC = GetACharacterFromFile(); } while (nowC >= '0' && nowC <= '7' && nowC != EOF); } else if(nowC >= '0' && nowC <= '9' || nowC == '.') { do { word[charIndex++] = nowC; if (nowC == '.') { pointCount++; } if (pointCount > 1) { isRight = false; } if (nowC == 'e') { eNum++; } if (eNum > 1) { isRight = false; } if (eNum == 1 && nowC != 'e') { lENum = lENum * 10 + nowC - '0'; } if (pointCount) { value = value + (nowC - '0') / (10 * b); } else if(eNum == 0){ value = value * 10 + nowC - '0'; } nowC = GetACharacterFromFile(); } while ((nowC >= '0' && nowC <= '9' || nowC == '.' || nowC == 'e' || nowC == '-' || nowC == '+') && nowC != EOF); }

if (nowC != EOF) {
    c.push(nowC);
    word[charIndex] = '\0';
    if (isRight && eNum == 0) {
        WORD_KNOW[wordKnow].wType = NUMBER;
        WORD_KNOW[wordKnow].WORD_VALUE = value;
    }
    else if (isRight && eNum == 1) {
        WORD_KNOW[wordKnow].wType = NUMBER;
        WORD_KNOW[wordKnow].WORD_VALUE = value * pow(10, lENum);
    }
    else {
        WORD_KNOW[wordKnow].wType = INVALID_WORD;
    }
    
    strcpy(WORD_KNOW[wordKnow].wName, word);
    WORD_KNOW[wordKnow].WORD_LINE = nowLine;

    wordKnow++;
    return true;
}
else {
    return false;
}

}

该单词拼写错误! 77 3.52e12.3 INVALID_WORD 14

修改后的代码在处理科学计数法时,新增了对指数部分的判断,可以正确识别科学计数法,如'3.52e12.3'将被识别为INVALID_WORD。

C++代码优化:识别数值及科学计数法

原文地址: https://www.cveoy.top/t/topic/BVF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录