Anzahl von einem String in einem anderen String
-
Ich habe einfach meine Schleife durch Deine ersetzt und einen Zeiger *temp deklatiert und mit quelle initialisiert.
So sieht das jetzt aus:
// Zählt Vorkommen von einem String in einem anderen #include <stdio.h> #include <string.h> int main(void) { int result = 0, count = 0; char quelle[160]; char suche[160]; char *temp; // Deklarierung temp = quelle; // Initialisierung // EINGABE puts("Geben Sie bitte den String ein, der durchsucht werden soll: "); fgets(quelle, 159, stdin); puts("Geben Sie bitte den zu suchenden Begriff ein: "); fgets(suche, 159, stdin); /* DEAKTIVIERT while ( 1 ) { location = strstr((quelle+count), suche); count += (temp-quelle); if ( temp != NULL ) result++; else break; } ENDE DEAKTIVIERT */ // BERECHNUNG while( (temp = strstr(temp, suche)) ) { result++; temp++; } // AUSGABE printf("\"%s\" wurde %d mal gefunden", suche, result); return 0; }
-
Ah sorry, da hab ich was nicht bedacht. Bei einem normalen Aufruf von fgets() wird das '\n' im String mitgespeichert, deswegen findet er auch den Suchstring praktisch nicht, ausser wenn der Suchstring direkt am Ende des Quellstrings liegt (oder natürlich exakt dieser ist). Das '\n' entfernen macht man am besten mit der Funktion strchr(), kannst ja mal selber hirnen
-
Ich habe das '\n'-Zeichen entfernt und es klappt wunderbar.
Hier der fertige Code:// Zählt Vorkommen von einem String in einem anderen #include <stdio.h> #include <string.h> int main(void) { int result = 0; // Für die Anzahl der Vorkommen char quelle[160]; // Quellstring char suche[160]; // Suchstring char nsuche[160]; // Suchstring ohne '\n' char *nullzeichen; // Ermittelt Position von '\n' int position = 0; // Position von '\n' im Suchstring char *temp; // Deklarierung temp = quelle; // Initialisierung // EINGABE puts("Geben Sie bitte den String ein, der durchsucht werden soll: "); fgets(quelle, 159, stdin); puts("Geben Sie bitte den zu suchenden Begriff ein: "); fgets(suche, 159, stdin); // '\n' im Suchstring entfernen nullzeichen = strchr(suche, '\n'); position = nullzeichen-suche; strncpy(nsuche, suche, position); // BERECHNUNG while( (temp = strstr(temp, nsuche)) ) { result++; temp++; } // AUSGABE printf("\nDer Begriff \"%s\" wurde %d mal gefunden\n", nsuche, result); return 0; }
Vielen Dank für die Hilfe!!
:xmas1:
-
Bei fgets() sollst du schon die echte Länge des Arrays übergeben, nicht länge-1. Die Funktion "denkt" von selbst an die '\0'. Aber tröste dich, das machen fast alle Anfänger falsch
Und die Rumrechnerei und Stringkopiererei beim entfernen des '\n' ist auch unnötig. Ein einfaches
if ( (nullzeichen = strchr(suche, '\n')) ){ *nullzeichen = '\0'; }
hätte auch gereicht.
:xmas1:
-
Hi
Ich mach das immer so:array[strlen(array)]='\0'
Ist das so auch gut, oder überseh ich da was?
-
Jay schrieb:
Hi
Ich mach das immer so:array[strlen(array)]='\0'
Ist das so auch gut, oder überseh ich da was?
ja, das ist schon 0
:xmas2:
-
Mal davon abgesehen, dass das array[strlen(array)] Element eigentlich per Definition schon eine '\0' ist kannst du dir bei fgets() nie sicher sein, dass wirklich ein '\n' hinten drankelebt (im gegensatz zur '\0', die ist sicher).
-
Ok danke euch. Sonst hät ich das noch die nächsten 10 Jahre so geschrieben
-
Jay schrieb:
Ok danke euch. Sonst hät ich das noch die nächsten 10 Jahre so geschrieben
einem schlauen compiler hätte das nix ausgemacht. hättest vielleicht ein warning gesehen, wie 'removed dead code'
-
char *last = string + strlen(string)-1; if(*last == '\n') *last = 0;