Câu hỏi này đã được các thành viên khác hỏi/trả lời nhưng trường hợp của tôi hơi khác ..Làm cách nào để đảo ngược các từ trong chuỗi?
Vấn đề: Làm cách nào để đảo ngược các từ trong chuỗi? Bạn có thể sử dụng strpos(), strlen(), substr() nhưng không phải các hàm rất hữu ích khác như explode(), strrev() v.v.
Đây là câu hỏi phỏng vấn cơ bản vì vậy tôi cần chứng minh khả năng thao tác chuỗi .
Ví dụ:
$ string = "Tôi là một cậu bé"
Trả lời:
"Tôi ma một yob"
Dưới đây là giải pháp của tôi đó đã cho tôi 2 ngày (tiếng thở dài) nhưng phải có giải pháp thanh lịch hơn. Mã của tôi trông rất dài ..
Cảm ơn trước!
ý định của tôi:
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
Code:
<?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;
}
?>
Yêu cầu chúng tôi trả lời câu hỏi phỏng vấn cho bạn? : ( –
FWIW, mã có vẻ ổn với tôi –
@Ian P: Anh ấy đã trả lời rồi. Anh ấy hỏi có cách nào thanh lịch hơn không. – webbiedave