Avatar billede sukos Juniormester
18. august 2003 - 18:23 Der er 15 kommentarer og
1 løsning

Mulige tegn i en streng

Hvis nu jeg har
$name = "sukos";

Hvordan får jeg så lavet et array med alle mulige "sammensætninger" af $name?

altså, f.eks.
$mulige = array("sukos", "Sukos", "SUkos", "SUKOs", "SUKOS"); //o.s.v.
Avatar billede Slettet bruger
18. august 2003 - 18:26 #1
Hvad skal du bruge det til? Er bare nysgerrig.
Avatar billede sukos Juniormester
18. august 2003 - 18:28 #2
Det jeg skal bruge det til, er at erstatte alle ord "sukos" med Anonym

Og umiddelbart, hvis jeg bruger
$str = $str_replace("sukos", "Anonym", $str);

bliver det jo kun ord som matcher exact. Altså Sukos bliver ikke erstattet
Men der er måske en function som "fixer" det?
Avatar billede schaefner Juniormester
18. august 2003 - 18:30 #3
$str = eregi_replace("sukos", "Anonym", $str);

den er ikke case-sensitive.
Avatar billede stalle Nybegynder
18. august 2003 - 18:32 #4
crap at man er for langsom
Avatar billede schaefner Juniormester
18. august 2003 - 18:33 #5
burde også virke:
$str = preg_replace("/sukos/i","Anonym",$str);
Avatar billede Slettet bruger
18. august 2003 - 18:34 #6
Præcis det var det jeg frygtede, du skulle bruge det til.

Brug eregi_replace istedet (eller str_ireplace hvis v.5).
Avatar billede sukos Juniormester
18. august 2003 - 18:37 #7
hmm, det burde jeg ha' husket på!
Og da det kun er "småting" eregi skal bruges til, ja, så bliver det jo nok løsningen!

Og ja, preg virker også, og skulle jo være hurtigere end eregi
smid bare et svar, schaefner, du var jo først ude! :O)

Og ellers, kunne jeg da godt tænke mig at kunne udskrive alle mulige "tegnsætninger" for et givent ord, men det må blive en anden dag!
Avatar billede stalle Nybegynder
18. august 2003 - 18:38 #8
eller en while-ting og en fil med alt der skal skiftes ud med Anonym
evt. med flere afsnit, så man kan tage andre ord, der skal erstattes, med alle tænkelige kombinationer af et givent ord.

Hmm, giver vist ikke megen mening, men nu er det sagt
Avatar billede Slettet bruger
18. august 2003 - 18:44 #9
Ok.
Avatar billede tipsen Nybegynder
18. august 2003 - 19:04 #10
Prøv lige at overveje, at et ord på 10 bogstaver har 1024 (2^10) forskellige kombinationsmuligheder med store og små bogstaver!

Derudover ville jeg tro at nedenstående kunne gøre det:

function Words($word) {
    echo strtolower(substr($word, 0, 1)) . Words(substr($word, 1));
    echo strtoupper(substr($word, 0, 1)) . Words(substr($word, 1));
}
Words('test');

-men det får min Apache til at gå ned... :-/
Avatar billede tipsen Nybegynder
18. august 2003 - 19:05 #11
ahh - nestede echo-kald... -skidt :-)
Avatar billede schaefner Juniormester
18. august 2003 - 19:31 #12
.
Avatar billede jakoba Nybegynder
19. august 2003 - 22:47 #13
function Words( $sofar, $word ) {
    if ( strlen( $word ) > 1 )
        Words( $sofar .strtolower(substr($word,0,1)), substr($word, 1) );
        Words( $sofar .strtoupper(substr($word,0,1)), substr($word, 1) );
    } else {
        echo $sofar .strtolower($word) ." ";
        echo $sofar .strtoupper($word) ." ";
    }
}
Words( "", 'test' );

men som tipsen siger, så pas på med at bruge den. udførelsestiden stiger exponentielt med længden på dit ord.

mvh JakobA
Avatar billede tipsen Nybegynder
19. august 2003 - 23:45 #14
jakoba: Det er faktisk en meget sød lille opgave som der næsten må findes en elegant løsning på - måske ved hjælp af bitwise operatorer...

Noget i retning af et for-loop der looper 2^ordlængde gange og switcher bogstaverne der svarer til tændte bits 32 til højre (dvs. tænder bit 6), hvilket svarer til at skifte til stort bogstav...
Avatar billede tipsen Nybegynder
19. august 2003 - 23:47 #15
Altså noget i retning af:

$ord = "test";
$len = strlen($ord);
$tmptxt = '';
for ($i=0;$i<pow(2,$len);$i++) {
    $tmptxt .= ???. '<br>';
}
echo $tmptxt;;

hvor ??? så skal erstattes med noget $ord ^ $i | 32 agtigt...
Avatar billede jakoba Nybegynder
19. august 2003 - 23:56 #16
tipsen >> ja og nej. der er jo også en del tegn der ikke har nogen 'uppercase' version, såsom cifre, punktum, parenteser, ...

men ellers er den generelle regel for bogstaverne at
  bogstav | x20 == lovercase( bogstav )  // x20 er 32
  bogstav & xDF == uppercase( bogstav )
Det gælder selv for ISO-latins æ, ø og å
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester