この質問に関しては、プログラムに少し変更を加えただけで、答えが得られました。コード構造の最適化を手伝ってくれる人はいますか?ありがとう!
元記事:
http://www.oschina.net/code/snippet_192190_16605
- /**
- *
- * @author Leng Liuyun
- * @param Sina Weibo http://weibo.com/130326007
- */
- function getLower($data){
- $length = strlen($data)-1;
- $str = '';
- for ($i =0;$i<$length;$i++){
- $flag = true;
- if(!isUpper($data[$i])){//現在は小文字です
- if($i == 3) {
- $flag = getFlag($data,$i);
- //最後から 4 番目が大文字の場合は当てはまりません
- if(isUpper($data[$i+4])){
- $flag = false;
- }
- } else if($i == $length-3){
- $flag = getFlag($data,$i);
- //最初の 4 番目が大文字の場合は当てはまりません
- if(isUpper($ data[$i-4] )){
- $flag = false;
- }
- }else if($i>3 && $i<$length-3){
- $flag = getFlag($data,$i);
- //前の場合 || 最後の 4 番目が大文字の場合は true ではありません
- if(isUpper($data[$i+4]) || isUpper($data[$i-4])){
- $flag = false;
- }
- }else {
- $flag = false;
- }
- if($flag){
- @$str .= $data[$i];
- }
- }
- }
- return $str;
- }
- //公開されている現在のキャラクターの前面 3 と 3 以降
- function getFlag($data,$i){
- $flag = true;
- for($j=$i-3;$j<=$i+3 ;$j++){
- if($ j != $i){
- //いずれかが小文字の場合は当てはまりません
- if(!isUpper($data[$j])){
- $flag = false;
- }
- }
- }
- return $flag;
- }
- /**
- *
- * 大文字かどうかを判断します
- */
- function isUpper($s){
- if(@ord($s) < 97){
- return true;
- } else{
- return false;
- }
- }
- $ res = '';
- $handle = fopen("./input.txt",'r');
- $d = fread($handle,filesize("./ input.txt"));
- $res = get lower (str_replace("rn","",$d));
- /*while(!feof($handle)){//一行ずつ読む方法
- $buffer = fgets($handle,4096);
- $res .= get lower($buffer);
- }*/
- echo $res;
- fclose($handle);
- ?>
コードをコピー
|