Nur mal so als Hinweis: es gibt reichlich Algorithmen zur Textsuche, wo man sich bedienen kann. ☺
Danke Dir, aber ich wollte ja mal selber probieren. strlen(...) ist eigentlich schon zuviel.
LG Heiko
(Themenstarter)
Anmeldungsdatum: Beiträge: 461 |
Danke Dir, aber ich wollte ja mal selber probieren. strlen(...) ist eigentlich schon zuviel. LG Heiko |
||||
Anmeldungsdatum: Beiträge: 11179 Wohnort: München |
Der Computer weiß nur, dass er einen char-Array mit einem String von bestimmter Länge darin hat - und er muss sich bei einem 4 Zeichen langen Suchbegriff mindestens bis zum viertletzten Zeichen vorarbeiten, um ausschließen zu können, dass dieser String im Text enthalten ist.
Wie in meinem Code-Beispiel zu sehen kann man auch auf die Zählvariable der inneren for-Schleife schauen und sich eine extra Variable sparen - steigen wir mal an der Stelle nach Zeile 34 ein, wo der Vergleich mit dem ersten Zeichen des Suchbegriffs gerade erfolgreich war und jetzt die Innere
Die for-Schleife inkrementiert für jeden Durchlauf die Variable |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 461 |
OK. Danke. LG Heiko |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 461 |
PS: Dein letzter Code ist etwas anders als in Deinem Codebeispiel. Absichtlich? Könntest Du bitte noch mal das gesamte Programm zeigen? Lieben Dank. |
||||
Anmeldungsdatum: Beiträge: 17552 Wohnort: Berlin |
Wenn der Text ab ist und das Wort b, ist strlen(text) 2, strlen(wort) 1, d.h.
Längere Texte und Wörter ändern nichts daran - wenn das Wort nur ganz am Ende steht, kann es nicht gefunden werden. |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12829 |
|||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 461 |
Moin. Hier noch mal das gesamte und geänderte (von seahawk1986) Programm: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char text[100]; char wort[15]; int i, x,j, gefunden; int anzahl_suchwort=0; size_t textLen = 0; size_t searchLen = 0; size_t nread; searchLen = strlen(wort); printf("Geben Sie einen Text ein: "); fgets(text,100,stdin); printf("Geben Sie nun das zu suchende Wort ein: "); scanf("%s", wort); /*äußere Schleife für die Indexe von 'text'*/ for(i=0;i<strlen(text)-1;i++) { int nMatches = 0; gefunden=0; /*Wenn das Zeichen am 'text' an der Indexposition i == Zeichen des 'wort' an Indexposition 0*/ if(text[i]==wort[0] && (strlen(text)-1-i) >= strlen(wort)) { gefunden=1; for (j = 1; j < searchLen; j++) { if (text[i + j] == wort[j]) { printf("Matching character '%c'\n", wort[j]); } else break; } if (j != searchLen) { printf("Incomplete match - '%c' != '%c' \n", text[i + j], wort[j]); continue; } nMatches++; } } return 0; } Programm läuft nur nicht: heiko@Worf:~/C_und_Linux$ ./main Geben Sie einen Text ein: Dies ist ein Test. Geben Sie nun das zu suchende Wort ein: ein Incomplete match - 's' != 'i' Incomplete match - 'i' != 'i' Incomplete match - 's' != 'i' heiko@Worf:~/C_und_Linux$ Lieben Dank, Heiko |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 461 |
@seahawk1986: Konntest Du meiner Ausführung folgen? Oder Logikfehler und das ich falsch an die Sache rangehe? LG Heiko |
||||
Anmeldungsdatum: Beiträge: 17552 Wohnort: Berlin |
Du solltest Dir den Index mit ausgeben, um zu sehen, wo es schief läuft. Als Messgerät kannst Du diesen Code verwenden:
|
||||
Anmeldungsdatum: Beiträge: 11179 Wohnort: München |
Ich habe da nur eine unnötige Klammerung weggelassen.
Das sieht so aus:
Das sollte dann für dein Beispiel sowas liefern: $ ./a.out Geben Sie einen Text ein: Dies ist ein Test got text of length 18, stripped 17 Geben Sie einen Suchbegriff ein: ein got search of length 4, stripped 3 Checking 'D' Checking 'i' Checking 'e' Matching character e Incomplete match - 's' != 'i' Checking 's' Checking ' ' Checking 'i' Checking 's' Checking 't' Checking ' ' Checking 'e' Matching character e Matching character 'i' Matching character 'n' Checking 'i' Checking 'n' Checking ' ' Checking 'T' Checking 'e' Matching character e Incomplete match - 's' != 'i' Checking 's' Checking 't' 1 matches found |