2017-05-11 24 views
0

私はクラスからこの練習問題を抱えています。スクリプトを、小文字のパラメータとして指定された文字列を使用する関数で作成する必要があり、同じ文字列を大文字で返す必要があります。が、それは印刷に来るとき、それはアルファベット順に文字を印刷し、いただきました間違った私が把握カント、ここではコードです:PHP - 印刷結果の問題

<html> 
<head> 
<title>Ejercicio 10</title> 
</head> 
<body> 

<center><h1>Ejercicio 10 (Función 1)</h1></center> 

<h1> 
<center> 

<form action="ejercicio10.php" method="post"> 
<input type="text" id="frase" name="frase" placeholders="Introduzca una frase para transformar a mayusculas"/> 
<input type="submit" value="Enviar"/> 
</form> 

<?php 

$frase = $_POST['frase']; 

function mayusculas($frase) { 

$longitud = strlen($frase); 
$minusculas = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","w","x","y","z"," "); 
$mayusculas = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","W","X","Y","Z"," "); 
$numeroLetras = count($minusculas); 

for ($i = 0; $i < $longitud + 1; $i++) { 

for ($j=0; $j < $numeroLetras ; $j++) { 

    $resultado = strrpos($frase, $minusculas[$j], $i); 

    if($resultado !== FALSE){ 

    print($mayusculas[$j]); 
    } 
    } 

    return null; 

    } 

} 

    print(mayusculas($frase)); 

?> 

</center> 
</h1> 

</body> 
</html> 
+1

?あなた自身の関数をコード化する必要がありますか? –

+0

'strtoupper()'を使わないのはなぜですか? –

+0

はい、私はstrtoupper関数でそれを行うことができることを知っていますが、教授はこのようなことをする方法を学ぶことを望んでいます –

答えて

0

運動のために申し訳ありませんが、ここでは何が起こっているのですか?

2つのループを使用しています。ここZ.

を介して各文字Aをループの反復する文字列の長さと同じくらい何回も、そして内側のループ反復処理し、外側には、正しい作業バージョンである、と私は説明します:

function mayusculas($frase) { 

    $longitud = strlen($frase); 
    $minusculas = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","w","x","y","z"," "); 
    $mayusculas = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","W","X","Y","Z"," "); 
    $numeroLetras = count($minusculas); 

    for ($i = 0; $i < $longitud + 1; $i++) { 

     for ($j=0; $j < $numeroLetras ; $j++) { 

      $resultado = strpos($frase, $minusculas[$j], $i); 

      if($resultado == $i && $resultado !== false) { 
       print($mayusculas[$j]); 
       break; 
      } 
     } 

    } 

} 

あなたのforループは正しいです、それはそうではありません。

  • まず、strrposの代わりにstrposを使用する必要があります。私たちは前方にある言葉の中の手紙の中を行き来しています。私たちはその結果にfalseをチェックすると

  • 、我々はまた、手紙を発見した位置は、我々が探している文字の位置であることを確認する必要があります(すなわち、外側のループから)我々一度

  • 正しい位置に一致する文字を見つける、あなたはそれを出力することができます。そして、私たちはそのループで終了しているので、内側のループの繰り返しを止めたいと思います。

  • 最後に、外側ループの最初の反復の後に、nullが返されましたが、これは間違っています。これにより、外側のループが2番目の文字に移動しなくなります。ルーピングをそのコースに合わせる必要があります。

最後に、これを行う最良の方法に近いところはありません。私は学習のためだけに強調しています。

+1

私はそれをテストし、あなたの助けと時間と助言のための完全な、ありがとう! –

+0

あなたの質問が解決した場合は、受け入れてください。 –

0

このループfor ($j=0; $j < $numeroLetras ; $j++) {を使用して、この$resultado = strrpos($frase, $minusculas[$j], $i);を行うと、あなたは基本的にループしていることを意味$minusculasアレイのみ(アルファベット順)です。

あなたのコードには、hkgkhのような繰り返し文字が含まれていると、GKHのみが出力されるという別のエラーがあります。

あなたのコードにある大きな問題は、for ($i = 0; $i < $longitud + 1; $i++) {ループにあるreturn nullステートメントです。これは1回の反復でループを楽しくします。

+0

そのループで何をしているのかは、配列内の文字の位置を確認することです。関数がtrueを返す場合は、$ mayusculas配列で同じ位置を出力するようにsupossedして、大文字をte彼らが確認された順序、何かを提案しますか? –

+0

'return null'を削除し、' if($ resultado!== FALSE){'を' if($ resultado!== FALSE && $ resultado == $ i){'に変更して結果を見ることをお勧めします。 – gaganshera

+0

また、 'strrpos'を' strpos'に変更してください。そしてこの演習から、あなたは2つの違いを読むことをお勧めします。 – gaganshera

0

別のオプション不必要な使用は、関数strposある場合です:あなたは

PHPセクション:あなたはPHPの機能に組み込まれて使用していない理由を

$frase = $_POST['frase']; 

function mayusculas($frase) { 

$longitud = strlen($frase); 
$minusculas = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","w","x","y","z"," "); 
$mayusculas = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","W","X","Y","Z"," "); 
$numeroLetras = count($minusculas); 

for ($i = 0; $i < $longitud; $i++) { 
    for ($j=0; $j < $numeroLetras ; $j++) { 
     if($minusculas[$j] == $frase[$i]) { 
      print($mayusculas[$j]); 
     } 
    } 
    } 

} 

print(mayusculas($frase)); 
+0

ありがとう!私はあなたが配列のような文字列を通過できることを知りませんでした、その非常に有用! –