Portál AbcLinuxu, 4. listopadu 2025 01:56
Dobrý den, řeším jedem problém, který mi docela láme hlavu.  Řekněme, že mám nějaký řetězec a chci jej předat jako parametr funkci, která vrátí stejně dlouhý řetězec s přeházenými písmeny. Jak na to? Když zkusím třeba:   
char *Fce(char *str) 
{ 
char *newStr = str; 
 newStr[1] = newStr[6]; // Zde je již chyba! 
printf("%c\n", newStr[1]); 
return newStr; 
} 
 Jde o to, že jsem zkoušel všemožné kombinace, ale zkrátka jsem nepřišel na to, jak prohodit znaky u jiného řetězce než s předem definovanou délkou (např: "char str[10];").
Byl by někdo tak laskav a napsal mi takovou funkci která přehodí některé znaky a vrátí upravený řetězec? Děkuji
Řešení dotazu:
Děkuji za konstruktivní návrh, ale bohužel k řešení to nevede.Ale vede. Jen delší cestou, než jste ochoten akceptovat.
Samozřejmě jsem před položením dotazu hledal kde se dalo. Bohužel marně.To jste zřejmně minul tento článek: http://www.linuxsoft.cz/article.php?id_article=842
Mimochodem nevím jak vy, ale pod pojmem "ofixlovat" si představuji něco opsat, ne něco pochopit.Ano, přesně tak. Pokud chcete pochopit, hotové řešení jedné konkrétní funkce vám stačit nebude.
novy = (char*) malloc(strlen(stary)+1); /* alokace stringu stejne velikosti */
if (novy == NULL)
{
   /* nahlasit chyby alokace */
}
strcpy(novy,stary);  /* zkopirovani puvodniho stringu do nove alokovane pameti */
/* ... pouziti ... */
free(novy); /* dealokace (uvolneni pameti) */
Místo malloc a strcpy lze také použít strdup:
novy = strdup(stary); /* alokace noveho stringu stejne velikosti a zkopirovani obsahu ze stareho */
if (novy == NULL)
{
   /* nahlasit chyby alokace */
}
/* ... pouziti ... */
free(novy); /* dealokace (uvolneni pameti) */
Funkce strdup() není součástí ANSI C, tedy nemusí být přenositelná na jiné systémy.
            
char *prehod(const char *str)
{
char *buff;
int n, i = 0;
    if ((buff = (char *)malloc((strlen(str) + 1) * sizeof(char))) == NULL)
    {
        fprintf(stdout, "Chyba alokace.\n");
        exit (1);
    }
    for(n = strlen(str) - 1; n >= 0; n--)
        buff[i++] = str[n];
    buff[i] = '\0';
    return (buff);
}
int main(void)
{
char str[5];
    strcpy(str, "ahoj");
    fprintf(stdout, "%s\n", prehod(str));
    return (0);
}
            
        Tiskni
            
                Sdílej:
                
                
                
                
                
                
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.