ForNext
Only Do What Only You Can Do
1.4. 語数を数える
VBScript
JScript
Perl
更新日 : 2008.12.26
use strict; #****************************************************************************** # 語数を数える #****************************************************************************** my $c = ""; my $EOF = "\0"; my $NEWLINE = "\n"; my $TAB = "\t"; my $BLANK = " "; my $YES = 1; my $NO = 0; my $inword = $NO; my $num_word = 0; while (($c = get_char()) ne $EOF) { if (($c eq $NEWLINE) || ($c eq $TAB) || ($c eq $BLANK)) { $inword = $NO; } elsif ($inword == $NO) { $inword = $YES; $num_word++; } } print $num_word, "\n"; #============================================================================== # 1文字 取得 #============================================================================== my $current_line = ""; my $pos = -1; 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"; $TAB = "\t"; $BLANK = " "; $inword = FALSE; $num_word = 0; while (($c = get_char()) != $EOF) { if (($c == $NEWLINE) || ($c == $TAB) || ($c == $BLANK)) { $inword = FALSE; } else if (!$inword) { $inword = TRUE; $num_word++; } } echo $num_word, "\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 = "" TAB = "\t"; BLANK = " "; inword = false; num_word = 0; while (c = get_char) != $EOF if (c == $NEWLINE) or (c == TAB) or (c == BLANK) inword = false elsif (!inword) inword = true num_word += 1 end end puts num_word