Portál AbcLinuxu, 13. července 2025 11:37


Dotaz: C bitwise a retezce

8.8.2008 23:41 Nikola Pajkovský | skóre: 16
C bitwise a retezce
Přečteno: 249×
Odpovědět | Admin
Zdarvim

Zajimalo by me jestli je mozne binarne prohazovat retezce(respektive znak po znaku). Je mozne prohodit int a i char. Pouzil jsem notoricky zname makro

#define SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))

Ale dostal jsem se do ouzkych. Pokud SWAP zavolam s char tak to vubec neni problem a bitove to prohodi. Ale problem number one je.

char* str_reverse( char* str )
{
    assert( str != NULL );

    char *result = NULL;
    result = str_init( str );

    unsigned int len = strlen( result );
    unsigned int loop = len >> 1;
    for( int i = 0; i < loop; i++ ){
        if( i == loop )
            break;
        SWAP( result[i], result[len-i]);
    }
    return result;
}

Save the whales. Feed the hungry. Free the mallocs
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.8.2008 00:12 H4wk | skóre: 9 | blog: H4wkuv_blog
Rozbalit Rozbalit vše Re: C bitwise a retezce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak v tom cyklu jsou nejake chyby. Mel by vypadat zhruba takhle:
for (int i = 0; i < loop; i++) {
    SWAP(result[i], result[len-1-i]);
}
Korespondenční Seminář z Programování - Pro každého středoškoláka, který to s programováním myslí vážně.
9.8.2008 01:25 Nikola Pajkovský | skóre: 16
Rozbalit Rozbalit vše Re: C bitwise a retezce
Dik uz to jede
Save the whales. Feed the hungry. Free the mallocs
9.8.2008 01:01 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: C bitwise a retezce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nemluve o tom ze tohle makro je na aktualnich procesorech zbytecne pomale, protoze neumoznuje paralelni provadeni. Postup pres pomocnou promennou bude v drtive vetsine pripadu rychlejsi.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
9.8.2008 01:32 Nikola Pajkovský | skóre: 16
Rozbalit Rozbalit vše Re: C bitwise a retezce
Mohl by jsi to tochu vic rozvest jak to udelat paralerne? Podle me nejdriv projede preprocesor ktery nahradi mista kde jsou makra a pak jde syntakticka anazyla(LR), semantika, vygenrovni kodu, optimalize, generovani kodu. Moc prave nevidim tu brzdu???
Save the whales. Feed the hungry. Free the mallocs
9.8.2008 07:32 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: C bitwise a retezce
Ehm, paralelni provadeni samotneho kodu.

Dnesni procesory maji v sobe mnoho vypocetnich jednotek a proto kod:
t1 = a;
t2 = b;
a = t2;
b = t1;
vyzaduje pouze dva tiky na rozdil od kodu:
a ^= b;
b ^= a;
a ^= b;
ktery vyzaduje VZDY tri tiky, protoze kazdy prikaz je zavisly na predchozim.

Jinak staci to rozepsat na t = a; a = b; b = t;.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
9.8.2008 12:23 HS | skóre: 12
Rozbalit Rozbalit vše Re: C bitwise a retezce
Zalezi na delce retezce, treba ma tak kratke retezce, kterym sekvencni vypocty nevadi. Kazdopadne mas pravdu, ze pres pomocnou promenou je to jednoduchsi a prehlednejsi.`

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.