ForNext
Only Do What Only You Can Do
1.2. 文字数を数える
VBScript
JScript
Perl
更新日 : 2008.12.26
use strict; #****************************************************************************** # 文字数を数える #****************************************************************************** my $c = ""; my $EOF = "\0"; my $num_char = 0; while (($c = get_char()) ne $EOF) { $num_char++; } print $num_char, "\n"; #============================================================================== # 1文字 取得 #============================================================================== my $current_line = ""; my $pos = -1; my $NEWLINE = "\n"; sub get_char { my $char; # まだ読んでなかったら if ($current_line eq "") { # 1行読む $current_line = <STDIN>; # ファイルの終わりなら 終了 return $EOF if (!$current_line); # 改行コードを取り除く chomp($current_line); # 現在位置 クリア $pos = 0; } # 行の終わりに達したら if ($pos >= length($current_line)) { # 現在行 クリア $current_line = ""; # 行の終わりを 知らせる return $NEWLINE; } # 半角 / 全角 if (substr($current_line, $pos, 1) =~ /^[\x80-\xff]/) { # 2バイト取得 $char = substr($current_line, $pos, 2); $pos += 2; } else { # 1バイト取得 $char = substr($current_line, $pos, 1); $pos++; } return $char; }
PHP
更新日 : 2008.12.26
<?php #****************************************************************************** # 文字数を数える #****************************************************************************** $c = ""; $EOF = "\0"; $current_line = ""; $pos = -1; $NEWLINE = "\n"; $num_char = 0; while (($c = get_char()) != $EOF) { $num_char++; } echo $num_char, "\n"; #============================================================================== # 1文字 取得 #============================================================================== function get_char() { global $fp; global $EOF; global $current_line; global $pos; global $NEWLINE; $char = ""; # まだ読んでなかったら if ($current_line == "") { # まだ OPEN してなかったら if ($pos == -1) { $fp = fopen("php://stdin", "r"); } # 1行読む $current_line = fgets($fp); # ファイルの終わりなら 終了 if (feof($fp)) { fclose($fp); return $EOF; } # 改行コードを取り除く $current_line = rtrim($current_line, "\n\r"); # 現在位置 クリア $pos = 0; } # 行の終わりに達したら if ($pos >= strlen($current_line)) { # 現在行 クリア $current_line = ""; # 行の終わりを 知らせる return $NEWLINE; } # 半角 / 全角 if (mb_ereg('^[\x80-\xff]', substr($current_line, $pos, 1))) { # 2バイト取得 $char = substr($current_line, $pos, 2); $pos += 2; } else { # 1バイト取得 $char = substr($current_line, $pos, 1); $pos++; } return $char; } ?>
Python
Ruby
更新日 : 2008.12.26
#****************************************************************************** # 文字数を数える #****************************************************************************** #============================================================================== # 1文字 取得 #============================================================================== $current_line = [] $pos = -1 $NEWLINE = "\n" $EOF = "\0"; def get_char # まだ読んでなかったら if $current_line.size == 0 # 1行読む line = $stdin.gets # ファイルの終わりなら 終了 return $EOF unless line # 改行コードを取り除く line.chomp!; # 文字の配列に分解 $current_line = line.split(//s) # 現在位置 クリア $pos = 0; end # 行の終わりに達したら if $pos >= $current_line.size # 現在行 クリア $current_line = [] # 行の終わりを 知らせる return $NEWLINE; end char = $current_line[$pos] $pos += 1 return char end #============================================================================== # 文字数を数える #============================================================================== c = "" num_char = 0 while (c = get_char) != $EOF num_char += 1 end puts num_char