"We are back" « oc.at

c (ansi)

d3cod3 02.05.2003 - 13:41 586 8
Posts

d3cod3

Legend
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15285
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
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
klar :) ... wenns ein codeteil ist und kein projekt ...

BobbyPI

jiu-jitsu rulez... ;)
Avatar
Registered: Nov 2001
Location: Vienna
Posts: 721
ja post halt mal ....

d3cod3

Legend
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15285
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:
Code:
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
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
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:

Code:
#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
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
anregung: lt. irc gespräch von gestern nur stdio..

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von Luki
anregung: lt. irc gespräch von gestern nur stdio..

also das was strstr macht selbst nachschreiben, sinn wo bist du? :o
ich denke nicht das man es dadurch annähernd so effektiv hinbekommt ...

d3cod3

Legend
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15285
ja, leider nur stdio. :(

das ist eines der probleme...

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
ärgerlich und umständlich, aber daran solls nicht scheitern ;)

einfach diese funktion statt strstr verwenden (der rest bleibt gleich)

Code:
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;
}
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz