Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Fgets + stlen() [Problem z liczeniem znaków]
motyl-pl
post
Post #1





Grupa: Zarejestrowani
Postów: 294
Pomógł: 31
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


  1. <?php
  2. final class polowa {
  3. var $wiersz = array();
  4. var $linia = 0;
  5. var $t;
  6.  
  7. function __construct() {
  8. $uchwyt = fopen('tak.txt', 'r');
  9.  
  10. while(!feof($uchwyt)) {
  11. $this->wiersz[$this->linia] = fgets($uchwyt, 1024);
  12. $this->linia++;
  13. }
  14.  
  15. $this->t = $this->wiersz[0];
  16.  
  17. fclose($uchwyt);
  18. }
  19.  
  20. function sprawdzt() {
  21. if($this->t < 1 or $this->t > 100) {
  22. echo "Liczba t jest nie odpowiednia!";
  23. }
  24. }
  25.  
  26.  
  27. function wyswietl() {
  28. for($i=1; $i <= $this->t; $i++) {
  29. $this->sprciag($this->wiersz[$i]);
  30. $caly_wyraz = strlen($this->wiersz[$i]) / 2 ;
  31. $skrocony_wyraz = floor($caly_wyraz);
  32. echo substr($this->wiersz[$i], 0, $skrocony_wyraz)."\n";
  33. }
  34. }
  35.  
  36. function sprciag($wejscie) {
  37. $sprawdz = 2 * strlen($wejscie);
  38. if($sprawdz>1000) {
  39. echo "Ciąg jest za duży";
  40. }
  41. }
  42.  
  43. }
  44.  
  45. $tak = new polowa();
  46. $tak->sprawdzt();
  47. $tak->wyswietl();
  48.  
  49. ?>


tak.txt
Kod
3
pierwszy
lubiec
ktotozrobi


Wejście
W pierwszej linijce wejścia znajduje się jedna liczba całkowita t (1<=t<=100). Każdy wiersz o numerze od 2 do t+1, zawiera ciąg długości 2*k (1<=k<=1000).

Wyjście
Dla każdego przypadku testowego na wyjściu powinien pojawić się ciąg będący pierwszą połową wczytanego ciągu.


Mój problem gdy odczytuje poszczególne wiersze, to strlen jest nie prawidłowe.
Ma ktoś jakiś pomysł ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kiler129
post
Post #2





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Nudziło mi się (IMG:style_emoticons/default/smile.gif)
  1. <?php
  2. final class half {
  3. var $date = array(); //Data array
  4. var $rowsToRead;
  5.  
  6. function __construct($file) {
  7. if(empty($file) || !is_readable($file)) { echo "Brak pliku lub jest nieczytelny!"; die(); }
  8. $this->data = file('tak.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); //Read file
  9. var_dump($this->data); //Check data by hand
  10.  
  11. $this->rowsToRead = $this->data[0]; //Number of rows
  12. if($this->rowsToRead < 1 || $this->rowsToRead > 100) {
  13. echo "Liczba t jest nie odpowiednia!";
  14. die();
  15. }
  16. }
  17.  
  18.  
  19. function spilt() {
  20. $res = "";
  21. for($i=1; $i<=$this->rowsToRead; $i++) {
  22. if((2*strlen($this->data[$i]))>1000) {
  23. echo "Ciąg w linii $i jest za duży";
  24. continue;
  25. }
  26.  
  27. $res .= substr($this->data[$i], 0, floor((strlen($this->data[$i]) / 2)))."\n";
  28. }
  29. return $res;
  30. }
  31. }
  32. /**************/
  33. $tak = new half("tak.txt");
  34. var_dump($tak->spilt());
  35. /**************/
  36.  
  37. //Expected results:
  38. /*
  39. array(4) {
  40.   [0]=>
  41.   string(1) "3"
  42.   [1]=>
  43.   string(8) "pierwszy"
  44.   [2]=>
  45.   string(6) "lubiec"
  46.   [3]=>
  47.   string(10) "ktotozrobi"
  48. }
  49. string(15) "pier
  50. lub
  51. ktoto
  52. "
  53. */
  54.  
  55.  
  56. ?>
  57.  


Ten post edytował kiler129 6.11.2010, 01:36:06
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.12.2025 - 03:17