0

これは私の eiffel プログラムで、基本的にスペースの削除 (特定のテキスト ファイル内の余分なスペースの削除) を行って、正規表現に従っています: A+(SA+)*EOL。ファイル内の各行は、アルファベットで始まる必要があります。アルファベット間のスペースは 1 つだけです。

私の質問は、このプログラムに基づいて、他のすべての単語を大文字にするように拡張するにはどうすればよいですか? つまり、2 番目、4 番目、6 番目などです。

feature {NONE} -- Main routine

copy_file
    -- Copy a file character by character from input to output
require
input_open: input.is_readable
output_open: output.is_writable
local flag: INTEGER
has_read_space: BOOLEAN
empty_line : BOOLEAN
do
empty_line: True
flag := 0       -- 0 for previous space, 1 for previous char
from read_char  -- Must prime the pump by reading the first character
until ch = EOF
loop
    from
        ch := input.last_character
    until
        ch = EOL
    loop
        if ch = Space_char and flag = 0 then        -- leading spaces
            read_char
        elseif ch /= Space_char and flag = 0 then   -- see first    charater after space
            if has_read_space then          -- this clause make sure the space will only place in between two words instead of end of lin
               output.putchar (Space_char)
            end
            output.putchar (ch)
            empty_line := False
            flag := 1
            read_char
        elseif ch = Space_char and flag = 1 then    -- see space after characters
            has_read_space := True          -- Don't output it right away
            flag := 0
            read_char
        elseif ch /= Space_char and flag = 1  then  -- see character after character
            output.putchar (ch)
            read_char
        end
    end
    if empty_line = False then
        output.putchar (EOL)        -- if line is not empty, then we place EOL at the end of line
    end
    flag := 0       -- reset it to 0 to make sure the next follow the same routine
    has_read_space := False -- reset it to avoid placing space in the beginning of line
    empty_line := True  -- reset to proceed to new line
    read_char
end

  -- At end of file, nothing to do in Eiffel except close the files
input.close
output.close
end
4

1 に答える 1

0

ちょうどそれを理解しました。別のフラグ、たとえば evenWord を設定し、それを false に初期化するだけです。そしてelseif ch = Space_char and flag = 1節でフラグを反転evenWord := not evenWordさせます

于 2015-10-03T19:41:50.800 に答える