Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C: Merkkijonosta palasen hakeminen

Lahha [01.03.2007 23:12:30]

#

Funktio hakee merkkijonosta palasen joka alkaa tietystä annetusta kohdasta joka joko annettuun merkkiin asti tai on annetun mittainen.

Funktio on suojattu virheitä vastaan ja virhe tilanteessa se palauttaa tyhjän merkkijonon.

Myöskin esimerkki pahamaineisin goto:n käytöstä.

/*
parametrit:
  const char* IN = osoitin merkkijonoon josta haetaan
  int start = kohta josta aloitetaan
  char end = merkki johon lopetetaan
  char end2 = toinen merkki johon lopetetaan
  int max = ulostulevan merkkijonon maksimi pituus.
  char* OUT = osoitin merkkijonoon johon haettu pätkä tallennetaan.
*/
void HaeString(const char* IN, int start, char end, char end2, int max, char* OUT)
{
	if(!IN || !OUT)//tarkistetaan että osoittimet on kunnossa
		goto loppu; //jos ei ole niin mennään loppuun

	//luvut kohdan laskemiseen
	int i=0; // aloitetaan nollasta koska muuten jos IN on lyhyempi kuin start käy huonosti.
	int o=0;

	if(start<0) // jos virheellinen aloituskohta
		goto loppu;

	if(start!=0)
		start--;

	//looppi kunns IN loppuu tai OUT:in maksimi pituus täyttyy
	while(IN[i]!='\0' && o < max)
	{
		i++;

		if(i < start)//haettava kohta ei vielä alkanut
			continue;

		if(IN[i]==end || IN[i]==end2)//jos loppu merkki
			goto loppu;

		OUT[o]=IN[i];
		o++;

	}
loppu:
	OUT[o]='\0';//lopetus merkki
	return;

}
int main()
{
	char merkkijono[100]="esimerkki";
	char buf[50]="";

	HaeString(merkkijono, 2, 'k', 49, buf);

	printf("%s\n",buf);//tulostaa "simer"

	system("PAUSE");

	return 0;
}

tesmu [27.03.2007 16:06:46]

#

miksei näin

if(!IN || !OUT) {
    OUT[o]='\0';//lopetus merkki
    return;
}
else {
//muut koodit
}

niin päästäisiin turhasta gotosta eroon...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta