Red de conocimiento informático - Aprendizaje de código fuente - Código fuente ilimitado

Código fuente ilimitado

Si ha tomado cursos como autómatas de lenguaje formal, este debería ser un problema muy simple. El formato del número entero se puede escribir como:? ^([-\+]?[1-9][0-9]*|0)$. Simplemente haga coincidir una expresión tan regular. ¿Qué pasa si estás usando GNU? El compilador de C++ puede llamar directamente a las funciones relevantes en RegEx.h; de lo contrario, puede convertir esta expresión regular en un autómata de estado determinista (DFA) y calcular la función de transferencia en cada estado, para que pueda juzgar fácilmente si una cadena es un número entero. . Por supuesto, DFA también se puede construir directamente.

Bien. Ahora solo necesitamos transferir el estado según el estado y luego según diferentes entradas. Los círculos de doble cara representan estados aceptables, o al final de una cadena, y cuando se alcanzan estos estados, se considera un número entero. ?

Para resumir, podemos darle a estos estados un número entero, suponiendo que de izquierda a derecha y de arriba a abajo son 0, 1, 2, 3, 4 respectivamente, entonces podemos establecer una variable q para registrar el estado actual. Siempre que haya caracteres sin procesar en la cadena de entrada, el valor de q se modificará de acuerdo con el método de transferencia de estado en la figura. Finalmente, si q=3 o 4, entonces la entrada es un número entero.

Por cierto, si los caracteres que introduces no son +, -, 0, 1,...9, puedes introducir el estado 2 directamente.