c (ansi)
d3cod3 02.05.2003 - 13:41 586 8
d3cod3
Legend...
|
kann ich hier bei nem problem einfach meinen code herhaun und eine frage dazu stellen? weil ich hab keine prinzipielle frage sondern es geht einfach was net und i weiß nimmer wieso...
Bearbeitet von atrox am 05.05.2003, 13:07
|
Vivo
Dreamworker
|
klar  ... wenns ein codeteil ist und kein projekt ...
|
BobbyPI
jiu-jitsu rulez... ;)
|
ja post halt mal ....
|
d3cod3
Legend...
|
also problemstellung ist: eine txt datei öffnen und nach einem string suchen den der user eingibt. die übergabe etc geht eh nur haut bei mir das suchen net hin. wenn ein wort nur einmal vorkommt gehts. bei 2mal oder doppeten zeichen hintereinander etc hauts net hin. vielleicht sehts ihr woran es liegt. anmerkung: die ganzen printf sind nur für mich damit ich nachvollziehen kann was das programm tut. hier die funktion: suchen(int argc, char *argv[])
{
FILE *fileptr;
int i,k,l,gefunden=0,stelle=0,laenge=0;
char suchstring[265], c;
for(i=0;argv[2][i]!='\0';i++)
suchstring[i] = argv[2][i];
suchstring[i] = '\0';
printf("%s ist der kjakjfl\n",suchstring);
for(i=0;suchstring[i]!='\0';i++)
laenge++;
fileptr=fopen(argv[1],"r");
if(fileptr==NULL)
{
printf("Fehler beim Oeffnen \n");
return(-1);
}
while((c=fgetc(fileptr))!=EOF)
{printf("%c ist c\n",c);
if(c==suchstring[0])
{
printf("ich bins auch%d %s\n",laenge,suchstring);
k=0;
l=0;
for(i=0;i<laenge;i++)
{
printf("ich bins\n");
if((c=fgetc(fileptr))!=(suchstring[k]))
{
printf("aktuell: %c \nk ist %d\n\n",c,k);
k++;
printf("x - %d gef: %d %d\n",l,gefunden,k);
}
else
{
l=10;
printf("aktuell else: %c\n",c);
printf("y - %d gef: %d %d \n",l,gefunden,k);
}
}
if(k==laenge)
{
gefunden++;
}
stelle++;
}
else
{
stelle++;
}
}
printf("\n\n%d wurden gefunden\n\n",gefunden);
}
Bearbeitet von d3cod3 am 02.05.2003, 13:57
|
FMFlash
tranceCoder
|
hab ich das richtig verstanden das das ergebnis "x mal gefunden" zu lauten hat? wenn ja, hab ich dir hier mal eine funktionierende lösung zusammengeschrieben: #include <windows.h>
#include <string.h>
#include <stdio.h>
int main (int argc, char **argv){
FILE *file_input;
unsigned int hits = 0, len;
char str_filename[512],
str_search[512],
str_buffer[512];
char *hit;
// die strings für den filenamen und den zu suchenden
// strings lasse ich den benutzer in der konsole eingeben.
// kann aber auch genauso ein übergebener parameter sein
printf ("Filename: ");
fgets (str_filename, 512, stdin);
strtok (str_filename, "\n");
printf ("String: ");
fgets (str_search, 512, stdin);
strtok (str_search, "\n");
len = strlen (str_search);
file_input = fopen (str_filename, "rt");
if (file_input == 0)
return;
while (!feof (file_input))
{
// die datei wird zeilenweise eingelesen und analysiert,
// so lange, bis feof() zutrifft
if (fgets (str_buffer, 512, file_input) == 0)
break;
hit = str_buffer;
for ( ;; )
{
// die zuvor eingelesene zeile wird mittels strstr()
// bis zum ende auf vorkommen des suchstrings durchsucht
hit = strstr (hit, str_search);
if (hit == 0)
break;
++hits;
hit+=len;
}
}
fclose (file_input);
printf ("\n%d hits\n",hits);
getch();
return 0;
}
fragen, wünsche, anregungen, beschwerden?
Bearbeitet von FMFlash am 02.05.2003, 14:52
|
Luki
UNDER CONSTRUCTION
|
anregung: lt. irc gespräch von gestern nur stdio..
|
FMFlash
tranceCoder
|
anregung: lt. irc gespräch von gestern nur stdio.. also das was strstr macht selbst nachschreiben, sinn wo bist du? ich denke nicht das man es dadurch annähernd so effektiv hinbekommt ...
|
d3cod3
Legend...
|
ja, leider nur stdio.  das ist eines der probleme...
|
FMFlash
tranceCoder
|
ärgerlich und umständlich, aber daran solls nicht scheitern einfach diese funktion statt strstr verwenden (der rest bleibt gleich) char* mystrstr (const char *input_str, const char *search_str){
BOOL hit;
char *ret;
unsigned int slen = strlen (search_str), x, y;
for (x=0; x<strlen(input_str); x++){
hit = TRUE;
for (y=0; y<slen; y++){
if (input_str[x+y] != search_str[y]){
hit = FALSE;
break;
}
else{
ret = &input_str[x];
}
}
if (hit)
break;
}
if (!hit)
return 0;
else
return ret;
}
|