TE
TE
boss3D
Guest
AW: [C] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...
Ich musste deinen Code minimalst anpassen, damit das Ganze kompilierbar ist. Semantisch sollte sich jedoch nichts geändert haben. Auf jeden Fall gibt's 2 Probleme: Erstens, der Code gibt für jedes x-beliebige Wort "gefunden" aus, und zweitens, bei tatsächlich existierenden Wörtern stimmen die Koordinaten nicht (außer bei SECURITY; da stimmt witzigerweise alles).
Vielen Dank, in jedem Fall, für die Mühe! Ich weiß deine Hilfe echt zu schätzen, aber ganz glücklich bin ich mit der Lösung trotzdem nicht. Auf der einen Seite, weil ich nicht selber darauf gekommen bin und auf der anderen Seite, weil ich das vermutlich selber auch nicht nachbauen könnte.
Wenn es dir also nichts ausmacht, würde ich gerne versuchen, mit deiner Hilfe den Weg, den ich im EDIT in meinem vorigen Posting beschrieben habe, weiterzugehen und zu schauen, ob das auch irgendwann zu einem funktionierenden Code führt.
Ich musste deinen Code minimalst anpassen, damit das Ganze kompilierbar ist. Semantisch sollte sich jedoch nichts geändert haben. Auf jeden Fall gibt's 2 Probleme: Erstens, der Code gibt für jedes x-beliebige Wort "gefunden" aus, und zweitens, bei tatsächlich existierenden Wörtern stimmen die Koordinaten nicht (außer bei SECURITY; da stimmt witzigerweise alles).
Code:
int checkFind(int x, int y, int xDir, int yDir, char *searchString, int matrix[ROWS][COLUMNS]) {
int found = 0; // solange true, bis der erste (vergleichs-)fehler auftritt
int step = 2; // beginnend nach dem 2. buchstaben - der erste war der hauptfund, der 2. war der "richtungsfund"
int searchX = 0, searchY = 0;
while (*(searchString+step) != '\0') {
searchX = x+(xDir*step);
searchY = y+(yDir*step);
if (searchX >= ROWS || searchY >= COLUMNS) { // wurde der rand der matrix erreicht, bevor das ganze wort gefunden wurde - abbruch
found = 1;
break; // raus aus der while
}
if (*(searchString+step) != matrix[searchX][searchY]) { // stimmt der 2. buchstabe des suchstrings NICHT mit dem nächsten (in entsprechender richtung liegenden) feld-buchstaben der matrix überein -> abbrechen
found = 1;
break; // raus aus der while
}
step++; // is ja kein c++ oder? jedenfalls gehts dann nen buchstaben weiter, wenn bisher alles passt
}
return found;
}
void searchMatrix(char *searchString, int matrix[ROWS][COLUMNS]) { // <- warum hast du da eigentlich sone seltsame variante? ^^
int x=0, y=0, i=0;
int max = 2; // wieviele suchrichtungen soll es geben? atm geh ich mal von nur 2en aus (vorwärts und runter)
for (y=0; y<COLUMNS; y++) { // <- erst spalten
for (x=0; x<ROWS; x++) { // dann zeilen ^^ - zumindest find ichs persönlich so leichter nachvollziehbar (von der reihenfolge der abarbeitung her)
if (*searchString==matrix[x][y]) { // erster buchstabe des suchstrings entspricht dem aktuell betrachteten zeichen in der matrix?
for (i=0; i<max; i++) {
switch (i) { // für jede suchrichtung die fälle bearbeiten - leicht erweiterbar
case 0: { // suche nach rechts weiter
if (checkFind(x, y, 1, 0, searchString, matrix)) { // überprüfe den fund, ned das es nur zufällig der buchstabe war und der rest nich passt
printf("found string '%s' at position %d|%d", searchString, x+1, y+1);
return; // und raus hier ^^
}
break;
}
case 1: { // suche nach unten weiter
if (checkFind(x, y, 0, 1, searchString, matrix)) { // überprüfe den fund, ned das es nur zufällig der buchstabe war und der rest nich passt
printf("found string '%s' at position %d|%d", searchString, x+1, y+1);
return; // und raus hier ^^
}
break;
}
// hier könnte man jetz ganz easy weitere suchrichtungen anfügen...
}
}
}
}
}
}
Wenn es dir also nichts ausmacht, würde ich gerne versuchen, mit deiner Hilfe den Weg, den ich im EDIT in meinem vorigen Posting beschrieben habe, weiterzugehen und zu schauen, ob das auch irgendwann zu einem funktionierenden Code führt.

Zuletzt bearbeitet:

), nur leider gibt er noch völlig falsche Spalten-Koordinaten bei horizontal und falsche Zeile-Koordinaten bei vertikal gefundenen Wörtern aus. 
naja, der hauptfehler den ich meinte is das +j hinterm string2. du willst doch schauen, ob eines der felder der matrix-zeile mit dem ersten des suchstrings übereinstimmt. du musst also den matrix-string zeichen für zeichen durchgehen (+j) und dabei immer mit dem selben zeichen (dem ersten) des suchstrings vergleichen. das +j beim string2 muss also weg.
