c (ansi)

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_ansi_77160/page_1 - zur Vollversion wechseln!


d3cod3 schrieb am 02.05.2003 um 13:41

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...


Vivo schrieb am 02.05.2003 um 13:45

klar :) ... wenns ein codeteil ist und kein projekt ...


BobbyPI schrieb am 02.05.2003 um 13:45

ja post halt mal ....


d3cod3 schrieb am 02.05.2003 um 13:51

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);

	
}


FMFlash schrieb am 02.05.2003 um 14:48

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?


Luki schrieb am 02.05.2003 um 14:54

anregung: lt. irc gespräch von gestern nur stdio..


FMFlash schrieb am 02.05.2003 um 15:02

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 schrieb am 02.05.2003 um 15:05

ja, leider nur stdio. :(

das ist eines der probleme...


FMFlash schrieb am 02.05.2003 um 15:32

ä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;
}




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025