Hi,
heute wurde meine Annahme revidiert, dass der Compiler stets ein '\0' an eine Zeichenkette anfügt.
Ich versuche zur Zeit folgende EBNF-Regeln in C++ zu implementieren:
digitNN: "1" | "2" | ... | "9".
digit: "0" | digitNN.
number: digitNN {digit}.
Ich habe dafür diese drei Funktionen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
bool isDigitNN(char* pChar);
bool isDigit(char* pChar);
bool isNumber(char* pLine);
bool isDigitNN(char* pChar)
{
switch(*pChar)
{
case '1':
case '2':
// ...
case '9':
return true;
default:
false;
}
}
bool isDigit(char* pChar)
{
return ('0' == pChar) || isDigitNN(pChar);
}
bool isNumber(char* pLine)
{
bool bProcessing = true;
char* pCurrentChar = pCode;
std::cout << pCurrentChar << std::endl;
if(isDigitNN(pCurrentChar))
while(bProcessing)
{
pCurrentChar = pCurrentChar++;
std::cout << pCurrentChar << std::endl;
if('\0' == pCurrentChar)
return true;
else if(isDigit(pCurrentChar))
continue;
else
return false;
}
}
|
Die Ausgabe auf der Konsole ist folgende:
123456
23456
3456
456
56
6
<- Leerzeile, auch als auf der Ausgabe
Leider gibt mir "isNumber" immer 'false' raus, da aber jedes Zeichen durchiteriert wird, nehme ich an,
dass auf das falsche Zeichen geprüft wird. Wenn ich jetzt diese öminöse Leerzeile zu einem "int" caste dann kommt 0 raus.
Wieso wird bei mir nicht "true" zurückgegeben?
LG Julien
EDIT:
Fehler gefunden. Habe ein '*' im ersten 'if' der isNumber Funktion vergessen.