2015-04-08 4 views
1

Я пробовал часами, чтобы понять это, но безрезультатно. Я искал и искал, с большим количеством результатов, говорящих, чтобы использовать массив. Я не могу использовать массив, поскольку это еще не было охвачено в моем классе. Вот что я должен сделать: Я должен использовать цикл for для проверки символов с использованием индексной переменной. Когда найден пустой символ, это указывает на конец слова. Затем мне нужно извлечь слово из строки и увеличить число слов, таким образом распечатав количество слов и извлеченное слово, продолжая до конца предложения. Затем распечатать общее количество слов. То, что я застрял, - это извлечение слова. Вот то, что у меня есть до сих пор, что вполне может быть неправильным, но я нахожусь здесь на своем пути, поэтому любой небольшой шаг в правильном направлении был бы замечательным. (Помните, что я не могу использовать массивы.)PHP: Извлеките слово из строки и получите число слов

$stringSentence = "The quick brown fox jumps over the lazy dog"; 
$wordcount = 1; 
$blankCharacter = stripos($stringSentence, " "); 

for ($i =0; $i<strlen($stringSentence);$i++) 
{ 
    $i. " ". $stringSentence{$i}."<br>"; 

} 
if ($blankCharacter) 
{ 
    echo $wordcount++, " "; 
    echo substr($stringSentence,0,$blankCharacter); 
} 

Спасибо за любую помощь.

+2

Каким будет ожидаемый выход? – Rizier123

+0

'stripos()' найдет только первое вхождение этой строки, поэтому ваш цикл будет выполняться только один раз. –

+1

Ожидаемые результаты: 2 быстрое 3 коричневого 4 лис 5 прыжков 6 над 8 ленивым 9 собака Есть 9 слов в этом предложении. –

ответ

0

Вы считали, что просто просматриваете каждое отдельное письмо, чтобы проверить пробелы и хранить во временном буфере в противном случае? Один из примеров:

$stringSentence = "The quick brown fox jumps over the lazy dog"; 

$buffer = ''; 
$count = 1; 
$length = strlen($stringSentence); 
for ($i = 0; $i < $length; $i++) { 
    if ($stringSentence{$i} !== ' ') { 
     $buffer .= $stringSentence{$i}; 
    } else { 
     echo $count++ . ' ' . $buffer . ' '; 
     $buffer = ''; 
    } 
} 
echo $count . ' ' . $buffer; 

Я не прикладывая много объяснений в мой ответ .. своего рода обратной подхода дает вам ответ, но это до вас, чтобы понять, как и почему выше подход работает.

+1

Обычно люди, просящие о помощи в своей домашней работе, должны иметь ответ, просто всунутый на их колени, или они никогда не узнают. – webternals

+1

@webternals Вот почему вопросы о домашних заданиях на самом деле не должны задаваться на SO - потому что это то, что они собираются получить. У меня нет времени писать псевдокоды или параграфы теории или намеки, тем более, что это не делает его «реальным ответом». В моем ответе есть много сложного кода: OP должен был бы обернуть голову и защититься, если бы они скопировали ее в свой учитель. – sjagr

+0

Во-первых, я хотел бы отметить, что публикация моего вопроса была последней инстанцией после того, как я просмотрел каждую книгу, которую мы должны прочитать, и каждую заметку и видео, которые мы наблюдали до сих пор. Я не ожидаю, что ответ будет передан мне, так как мне нравится понимать, почему я пишу код и как он работает. Это будет моя карьера, поэтому не поймешь, что я просто брошусь под автобус. Во-вторых, @sjagr Первоначально у меня был каждый символ, включая пробелы. следовательно, $ i. "$ string {i}." "; Позднее я добавил утверждение if после других исследований. –

0

Массивы не так уж сложны! А решение очень легко с ним:

(. Здесь я просто explode() ваша строка в массив Затем я просто перебрать массив и печать на выходе)

<?php 

    $stringSentence = "The quick brown fox jumps over the lazy dog"; 
    $words = explode(" ", $stringSentence); 

    foreach($words as $k => $v) 
     echo "WordCount: " . ($k+1) . "| Word: $v<br>"; 

    echo "Total WordCount: " . count($words); 

?> 

выход:

WordCount: 1| Word: The 
//... 
WordCount: 9| Word: dog 
Total WordCount: 9 

Если вы хотите узнать больше о массивах смотрите в руководстве: http://php.net/manual/en/language.types.array.php

EDIT:

Если вы не можете использовать массивы, просто используйте:

Здесь я просто перебрать все символы в предложении, чтобы проверить, если он является пробелом или концом строки. Если условие истинно, я печатаю слово count + substr из последнего пробела до текущего. Затем я также увеличиваю число слов с 1. В конце я просто распечатываю общее количество слов (обратите внимание, что я вычитал 1, потому что последнее слово также добавит 1 к счету, который слишком много).

<?php 

    $stringSentence = "The quick brown fox jumps over the lazy dog"; 
    $wordcount = 1; 
    $blankCharacter = 0; 

    for ($i = 0; $i < strlen($stringSentence); $i++) { 
     if($stringSentence[$i] == " " || $i+1 == strlen($stringSentence)) { 
      echo "WordCount: $wordcount | Word: " . substr($stringSentence, $blankCharacter, $i-$blankCharacter+1) . "<br>"; 
      $blankCharacter = $i; 
      $wordcount++; 
     } 

    } 
    echo "Total WordCount: " . ($wordcount-1); 

?> 
+1

Я думаю, что не использование массива является скорее ограничением проблемы, а не соображениями OPs. – dan08

+1

OP не может использовать массив, потому что он еще не был покрыт классом. –

+0

Я понимаю, что они не сложны, просто не могут их использовать. –

0

Поскольку это работа на дому, я не могу сделать это для вас, но у вас есть закрывающую скобку для одного в неправильном месте

ли взглянуть на этот SUDO код, и вы должны быть в праве направление.

$blankCharacter = ' '; 
for ($i =0; $i<strlen($stringSentence);$i++) 
{   
    if (thisCharacter == $blankCharacter) 
    { 
     $wordcount++; 
    } 
} 
Смежные вопросы