Bir dize kelimeleri ters nasıl?

0 Cevap php

Bu soru / sorulan diğer üyeleri tarafından cevap ama benim durum biraz farklı olduğunu ..

Sorun: bir dize kelimeleri ters nasıl? Sen) strpos (), strlen (), substr () ancak böyle (patlayabilir gibi diğer çok yararlı işlevleri kullanabilirsiniz, strrev (vb)

Bu temelde ben dizeleri işlemek yeteneğini göstermek gereken bir görüşme sorudur.

Örnek:

$ String = "Ben bir erkeğim"

Cevap:

"Ben bir serseri ma"

Aşağıda benim çözüm 2 gün sürdü ki (siir) ama gerek daha zarif bir çözüm olması. Benim kod çok uzun görünüyor ..

Şimdiden teşekkürler!

Benim niyetim:

1. get number of word
2. based on number of word count, grab each word and store into array
3. loop through array and output each word in reverse order

Kod:

<?php

$str = "I am a boy";

echo reverse_word($str) . "\n";

function reverse_word($input) {
    //first find how many words in the string based on whitespace
    $num_ws = 0;
    $p = 0;
    while(strpos($input, " ", $p) !== false) {
        $num_ws ++;
        $p = strpos($input, ' ', $p) + 1;
    }

    echo "num ws is $num_ws\n";

    //now start grabbing word and store into array
    $p = 0;
    for($i=0; $i<$num_ws + 1; $i++) {
        $ws_index = strpos($input, " ", $p);
        //if no more ws, grab the rest
        if($ws_index === false) {
            $word = substr($input, $p);
        }
        else {
            $length = $ws_index - $p;
            $word = substr($input, $p, $length);
        }
        $result[] = $word;
        $p = $ws_index + 1; //move onto first char of next word
    }

    print_r($result);
    //append reversed words
    $str = '';
    for($i=0; $i<count($result); $i++) {
        $str .= reverse($result[$i]) . " ";
    }
    return $str;
}

function reverse($str) {
    $a = 0;
    $b = strlen($str)-1;
    while($a < $b) {
        swap($str, $a, $b);
        $a ++;
        $b --;
    }
    return $str;
}

function swap(&$str, $i1, $i2) {
    $tmp = $str[$i1];
    $str[$i1] = $str[$i2];
    $str[$i2] = $tmp;
}

?>

0 Cevap