enthält CString Buchstabe,Zahl,Operator,...?
-
Hi Leute,
ich nehme mal an, dass es für mein Problem eine ziemlich einfache Lösung gibt - nur ich komme nicht drauf.Also folgendes:
Ich habe einen CString, nennen wir ihn mal "m_sGleichung". Der enthält nun eine Gleichung, z.b. "x5-5x2+2x-15 = 0". Ich möchte jetzt prüfen, ob ein Zeichen, ein Buchstabe, eine Zahl, ein '=,+,...' Zeichen oder eine Klammer(rund oder eckig) ist.Also, ich habe mir da folgendes überlegt: Vielleicht könnte man es über ASCI machen (ich weiß nur nicht wie). Ich habe nämlich keine Lust ewig viel Code zu schreiben und zu testen: ist es ein 'A', ist es ein 'B',...u.s.w.
Ich habe mir das ungefähr so gedacht:
for(int iIndex = 0;iIndex < m_sGleichung.GetLength();iIndex++) //m_sGleichung ist der CString { if(TestBuchstabe(m_sGleichung.GetAt(iIndex))) // Eine Funktion, die ein char übernimmt und einen boolschen Wert zurückgibt { ... } if(TestZahl(m_sGleichung.GetAt(iIndex))) // analog zu obigem { ... } if(TestOperator(m_sGleichung.GetAt(iIndex))) { ... } if(TestKlammer(m_sGleichung.GetAt(iIndex))) { ... } }
Hat irgendjemand schon mal so etwas ähnliches programmiert oder eine Idee oder irgend etwas, was mir weiterhelfen könnte ?
Vielen Dank im Voraus
mfg takeiteasy
-
IMHO hast du die Lösung schon gepostet, nur, das du die kleinen feinen Funktionen ala TestBuchstabe... noch ausprogrammieren mußt....
-
Hallo,
im Prinzip ist die Lösung sich ein Array anzulegen und dieses durczugehen. Ich habe mal für meine Anwendung diesen Code verwendet, vielleicht hilft er ja weiter:
CString v_zahl = "1234567890";
CString v_zeichen = "abcdefghijklmnopqrstuvwxyz";
CString v_oper = "^!%&*+-#/=.,";
CString v_formator = " ";
CString v_klammern = "()";CString teststring = "x5-5x2+2x-15*(4) = 0";
int i,j;for( i=0; i<=teststring.GetLength()-1; i++)
{
//Teste Zeichen
for( j=0; j<=v_zeichen.GetLength(); j++)
{
if(teststring.GetAt(i)==v_zeichen.GetAt(j)){
MessageBox("Zeichen");
break;
}
}//Teste Zahl
for(j=0;j<=v_zahl.GetLength();j++)
{
if(teststring.GetAt(i)==v_zahl.GetAt(j)){
MessageBox("Zahl");
break;
}
}//Teste Oper
for(j=0;j<=v_oper.GetLength();j++)
{
if(teststring.GetAt(i)==v_oper.GetAt(j)){
MessageBox("Operator");
break;
}
}//Teste Formator
for(j=0;j<=v_formator.GetLength();j++)
{
if(teststring.GetAt(i)==v_formator.GetAt(j)){
MessageBox("Leerzeichen");
break;
}
}//Teste Klammer
for(j=0;j<=v_klammern.GetLength();j++)
{
if(teststring.GetAt(i)==v_klammern.GetAt(j)){
MessageBox("Klammern");
break;
}
}
}
-
@Ocrana
Wie siehts mit Code-Tags aus?... verkürzte Ocrana-Version:
CString v_zeichen = "abcdefghijklmnopqrstuvwxyz"; CString v_oper = "^!%&*+-#/=.,"; CString v_formator = " "; CString v_klammern = "()"; CString teststring = "x^5-5x^2+2x-15*(4) = 0"; for( int i=0; i<=teststring.GetLength()-1; i++) { TCHAR z = teststring[i]; //Teste Zeichen if( v_zeichen.Find( z)) MessageBox("Zeichen"); else //Teste Zahl if( isdigit( z)) MessageBox("Zahl"); else //Teste Oper if( v_oper.Find( z)) MessageBox("Operator"); else //Teste Formator if( v_formator.Find( z)) MessageBox("Leerzeichen"); else //Teste Klammer if( v_klammern.Find( z)) MessageBox("Klammern"); }
[ Dieser Beitrag wurde am 10.12.2002 um 09:07 Uhr von RenéG editiert. ]
-
DANKE euch beiden für eure schnellen Antworten !!!!
DANKE DANKE DANKE DANKE !!!!!!!!!!!!!!!!!!!!!!!!!!!
-
Das ist nicht ganz richtig.
CString::Find gibt -1 zurück wenn er nix gefunden hat.
Es muss also
if(v_zeichen.Find(z) >= 0) //oder if(v_zeichen.Find(z) != -1)
heißen.
-
Oh, sollte natürlich überall ein Ausrufezeichen vor den Finds sein!
-
Original erstellt von RenéG:
Oh, sollte natürlich überall ein Ausrufezeichen vor den Finds sein!:p
Das haut dann aber auch nicht hin!
-
@Nemesyzz
Doch, da Find 0 zurückgibt, wenn der Buchstabe gefunden wurde!
-
Original erstellt von RenéG:
@Nemesyzz
Doch, da Find 0 zurückgibt, wenn der Buchstabe gefunden wurde!Nee!
z.B. v_zeichen, Buchstabe ist 'b' Rückgabe: 1 (c == 2, d == 3,...)
-
Uups, ich glaub, die Weihnachtsfeiern diese Woche haben doch zu sehr reingehauen *mirandieStirngreif*