řetězce,porovnání,připojení na konec – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

řetězce,porovnání,připojení na konec – C / C++ – Fórum – Programujte.comřetězce,porovnání,připojení na konec – C / C++ – Fórum – Programujte.com

 

Swixi
~ Anonymní uživatel
4 příspěvky
3. 2. 2014   #1
-
0
-

Ahoj, dostali jsme ve škole úkol, tak jsem na něm začal dělat. 1 úloha zvládnutá ale u této druhé jsem se sekl a dost.. Mohl by ji někdo udělat a vysvětlit mi jak to vlastně udělal (respektivě nějak to "analizovat")abych to pochopil . Byl bych moc vděčný. Lámu si nad tím hlavu už 2dny a zatím jsem vymyslel jen jak to udělat teoreticky ale i to možná bude špatně.. (když jsem požádal učitele o vysvětlení tak to vysvětlil na jiném příkladu a já z toho byl ještě víc blbej.:( )

úloha :

*Napište funkci char * strCatAt(char *s1, const char *s2, int p), která vloží do řetězce s1 na pozici p
řetězec s2. Je-li p větší, než délka s1, připojí s2 na konec s1. Uvažujte, že v s1 je alokován dostatečný
prostor. Návratovou hodnotou je ukazatel na výsledný řetězec, resp. hodnota NULL byl-li s2 prázdný
nebo p záporné.
Např.: strCatA( strCatA( „Dům a“, „n“, 5), „kraji silnice“, 100)  “Dům na kraji silnice“
*

**Toto jsem tak zhruba psal a zajímalo by mne zdali jsem to pochopil správně a šlo by to tak použít, ale zpětně si myslím že asi ne no .. Prosím o pomoc. **

Co si myslím že se tam použije:

/* funkce připojení jednoho řetězce na konec druhého*/
strcat(char s2[], char s1[], int p)

{
int i, j;
i = j = 0;
while (s2[i] != '\0')
i++;
while ((s2[i++] = s1[j++]) != '\0')
;
/*ted return s1* /
}

copy(char s1[], char s2[])
{
int i;
i = 0;
while ((s1[i] = s2[i])!= '\0')
++i;
}

/*tímto bych kopíroval s2 do s1 ne ?*/

A pak asi něco budu ukládat do paměti a pak z ní něco brát ale v C jsme v začátcích a on s námi neprogramuje .. (učí na 2 věci.) Prosím pomozte. 

Nahlásit jako SPAM
IP: 46.13.91.–
3. 2. 2014   #2
-
0
-

1. určíš délku s1, např pomocí strlen a zjistíš, zda je p větší než déka s1
2a pokud bylo p větší než délka s1, připojíš k s1 řetězec s2 např pomocí strcat
2b jinak s1 rozdělíš. Část od pozice p až po konec si zkopíruješ do pomocné proměnné, asi budeš muset dynamicky alokovat pomocnou paměť
3b pozice p je místo umístění vkládaného řetězce. Nakopíruješ sem řetězec s2 např pomocí strcpy
3b za "polotovar" v s1 připojíš část řetězce uloženou v pomocné paměti.

Před bod 1 vložíš kontrolu p a délky s2 - pro p záporné nebo prázdný s2 vrátíš NULL

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Swixi
~ Anonymní uživatel
4 příspěvky
3. 2. 2014   #3
-
0
-

#2 hlucheucho
dík, ale bohužel pochopil jsem to, ale pár věcí jako je např. strcpy,pomocné paměti,alokovat dynamickou paměť či co. nevím jak to udělat. Jsme v začátcích a jak už jsem psal učitel učí na dvě věci ..chci se to naučit ale nikde jsem nenašel nějak extra slušný návod jak se naučit v C. pochopitelně zkoušet new programy atd. to vím .. ale tohle mi ve škole neděláme . jedem rychle a nestíhám .. Hodilo by se mi poradit nějaké příkazy a třeba nějaké stránky nebo knižku kde jsou třeba i cvičení a dá se podle toho rychle učit.. (na 1 místě ale teď musím vyřešit toto jelikož jinak se pak z toho asi zblázním..)

Nahlásit jako SPAM
IP: 46.13.91.–
3. 2. 2014   #4
-
0
-

zkus třeba nastudovat http://www.sallyx.org/sally/c/

strlen, strcpy, strcat... google najde. Na porovnání složí if. Pro zjednodušení se dá obejít bez dynamické alokace paměti, stačí "velký" řetězec. Když se ty funkce "šikovně" použijí, bude to fungovat podle zadání.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Swixi
~ Anonymní uživatel
4 příspěvky
3. 2. 2014   #5
-
0
-

#4 hlucheucho
jo to vypadá na slušnou stránku. Určitě zkusím přes ní studovat dík. Teď ještě musím přijít na tuhle úlohu jak jí udělat bez nějaké alokace paměti. (tu jsme se ještě určo neučili) Potřeboval bych pochoit co je v tom zadání to p .. Co vyjadřuje nebo tak něco abych si dokázal představit co to vlastně mám tedy přesně udělat a s čím to budu pracovat.

Nahlásit jako SPAM
IP: 46.13.91.–
4. 2. 2014   #6
-
0
-

p je číslo určující pozici znaku. Na jeho místě řetězec s1 "přetrhneš" a vložíš s2, např:

s1 = "sem vlozim od pate pozice obsah s2"
s2 = "text"
p = 5

a výsledek je s1  = "sem text vlozim od pate pozice obsah s2"

nesmíš zapomenout, že pole se indexují od 0 a řetězec je pole typu char. Teď mne napadlo, že není nutné alokovat další paměť, stačí s tím pracovat jako s polem a použít memmove. Pomocí strlen určíš délku s1 a s2, když je sečteš získáš délku výsledného řetězce a pak to pomocí memmove přeskládáš.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Swixi
~ Anonymní uživatel
4 příspěvky
4. 2. 2014   #7
-
0
-

hlucheucho : dík za to vysvětlení toho p. konečně mi to někdo pořádně vysvětlil . (ani učitel mi to takle nedokázal vysvětlit.) jinak to s tím memmove jsem tady ve výpisech co máme od včera četl a taky jsem zauvažoval že by to s jeho pomocí šlo ale tak daleko nejsme a už teď jsem o dost vpředu než ostatní spolužáci. né že bych si stěžoval :D  akorát spousta příkazů ještě nevím jak fungují. např to memmove ..

Nahlásit jako SPAM
IP: 46.13.91.–
4. 2. 2014   #8
-
0
-

co ti na memmove našel google? Mě třeba popis funkce. Že je to v angličtině? Se nauč jazyk tak aby ti to nevadilo.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
vitamin+8
Grafoman
4. 2. 2014   #9
-
0
-
Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
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, 58 hostů

Podobná vlákna

Konec INVEXu — založil Nefaritus

Po 2 vete konec — založil Anonym

Konec vstupu — založil xeres

Konec pole — založil Janek

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ý