home > 写経編 > Brian W.Kernighan, P.J.Plauger『ソフトウェア作法』 > 1.手はじめに >

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

PowerShell

Scala

F#

C

C++

C++Builder

VC++

C#

Java

Objective-C

D

VB

VB.NET

Delphi

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system