Funkce substr() v jazyce C

Funkce substr() která je běžná v kdejakém skriptovacím jazyce (nebo modernějších jazycích jako C#, C++, ..) v jazyce C chybí. Napíšeme si tedy vlastní.


Prototyp funkce vypadá následovně:

char *substr(const char *str, int start, int length = -1)

const char *str –
vstupní řetězec

int start - počáteční pozice požadovaného podřetězce

int length – délka podřetězce (nepovinné). Pokud není zadáno vrátí se zbytek řetězce od pozice start

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

char *substr(const char *str, int start, int length = -1)
{
	unsigned int slen = strlen(str);
	if (((unsigned int)start + length) > slen) return NULL;

	unsigned int size = (length == -1) ? (slen - start) : length;
	char *buf = (char *)malloc((size+1) * sizeof(char));

	strncpy(buf, str+start, size);
	buf[size] = '\0';
	return buf;
}

int main()
{
	char *substring;
	char str[] = "Hello my big world";

	if ((substring = substr(str, 9, 3)) != NULL)
	{
		printf("%s", substring); // vypise: "big"
		free(substring);
	}

	return 0;
}

Jelikož funkce substr() alokuje pamět neměli bychom zapomínat ji také ručně uvolnit.

38 Responses to Funkce substr() v jazyce C

  1. Pingback: Alexander6

  2. Pingback: Alexander7

  3. Pingback: DUSTIN

  4. Pingback: PERRY

  5. Pingback: CHARLIE

  6. Pingback: WALLACE

  7. Pingback: BRANDON

  8. Pingback: ENRIQUE

  9. Pingback: LEWIS

  10. Pingback: TERRENCE

  11. Pingback: EDUARDO

  12. Pingback: TRACY

  13. Pingback: FELIX

  14. Pingback: JACK

  15. Pingback: CARL

  16. Pingback: BILLY

  17. Pingback: BYRON

  18. Pingback: RODNEY

  19. Pingback: RAY

  20. Pingback: BRANDON

  21. Pingback: DARYL

  22. Pingback: ALEJANDRO

  23. Pingback: CLIFTON

  24. Pingback: VICTOR

  25. Pingback: TIM

  26. Pingback: JERRY

  27. Pingback: LEWIS

  28. Pingback: BRETT

  29. Pingback: BRUCE

  30. Pingback: MARION

  31. Pingback: JASON

  32. Pingback: CARLOS

  33. Pingback: RAUL

  34. Pingback: MARVIN

  35. Pingback: HARVEY

  36. Pingback: BILLY

  37. Pingback: SHANE

  38. Pingback: ALBERTO

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam protection by WP Captcha-Free