Hledani nejdelsiho podretezce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hledani nejdelsiho podretezce – C / C++ – Fórum – Programujte.comHledani nejdelsiho podretezce – C / C++ – Fórum – Programujte.com

 

Daniel
~ Anonymní uživatel
74 příspěvků
5. 12. 2012   #1
-
0
-

Ahojte, nevěděl by někdo, jak prosím napsat  funkci  char *najdi(char  *zdroj, char prvni, char posledni), která v řetězci zdroj najde nejdelší podřetězec, který začíná znakem prvni a končí znakem posledni a vrátí jej jako svou návratovou hodnotu. V případě nenalezení takového řetězce vrátí funkce  NULL?

Nahlásit jako SPAM
IP: 46.13.107.–
Daniel
~ Anonymní uživatel
74 příspěvků
5. 12. 2012   #2
-
0
-

Nevíte někdo, proč to prosím nejede?

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

char *najdi(char *zdroj, char *prvni)
{
    int i, i2, j;

    for (i = (int)strlen(zdroj)-(int)strlen(prvni); i >= 0; i--) {

        for (j = 0, i2 = i;prvni[j] != '\0'; j++, i2++) {

            if (prvni[j] == zdroj[i2]) {
                if (prvni[j+1] == '\0')
                    return &zdroj[i];
            }
            else break;
        }
    }
    return NULL;
}

int main()
{

char *zdroj = "ababcbaa";
char *prvni = "a";
char *druhy = "b";

printf("Je dan textovy retezec: %s ", zdroj);
printf("\nHledame podretezec od %s do %s ", prvni, druhy);

printf("\n\nPrvni nejblizsi slovo odpovidajici hledanemu je: %s %s\n\n", najdi(zdroj, prvni));

    return 0;
}

Nahlásit jako SPAM
IP: 46.13.107.–
zlz
~ Anonymní uživatel
634 příspěvků
5. 12. 2012   #3
-
0
-

Zkus ke každému řádku připsat, co podle tebe dělá. Určitě na to přijdeš.

Nahlásit jako SPAM
IP: 78.156.159.–
zlz
~ Anonymní uživatel
634 příspěvků
5. 12. 2012   #4
-
0
-

To musí pochopit každý, názorněji to asi nesvedu.

char *najdi(char *zdroj, char prvni, char posledni)
{
	int zacatek = -1, konec = -1;
	int delkazdroje = strlen(zdroj);

	for (int i = 0; i < delkazdroje; i++)
	{
		if (zdroj[i] == prvni)
		{
			zacatek = i;
			break;
		}
	}
	if (zacatek == -1)
		return NULL;

	for (int i = delkazdroje - 1; i >= zacatek; i--)
	{
		if (zdroj[i] == posledni)
		{
			konec = i;
			break;
		}
	}
	if (konec == -1)
		return NULL;

	int delkapodretezce = konec - zacatek + 1;
	char *podretezec = (char*) malloc(delkapodretezce + 1);

	if (podretezec != NULL)
	{
		memcpy(podretezec, zdroj + zacatek, delkapodretezce);
		podretezec[delkapodretezce] = 0;
	}
	return podretezec;
}

...
{
	char *zdroj = "ababcbaa", prvni = 'a', posledni = 'b';
	char *podretezec = najdi(zdroj, prvni, posledni);
	printf("%s\n%s\n", zdroj, podretezec);
	free(podretezec);
}
Nahlásit jako SPAM
IP: 78.156.159.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý