编码 space 删除时如何删除最后一个 space
How do I get rid of the last space when coding space removal
这是我的 space 移除任务的埃菲尔代码:
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
do
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
output.putchar (ch)
flag := 1
read_char
elseif ch = Space_char and flag = 1 then -- see space after characters
output.putchar (Space_char)
flag := 0
read_char
elseif ch /= Space_char and flag = 1 then -- see character after character
output.putchar (ch)
read_char
end
end
flag := 0
read_char
end
-- At end of file, nothing to do in Eiffel except close the files
input.close
output.close
end
这是示例输入:
Leading spaces
Training spaces
Leading and trailing spaces
Only interword spaces
Leading, trailing and interword spaces
This line has correct spaces
Previous line was empty
Previous line has only leader spaces
OneWordLine
Three word line
我运行代码和我得到的输出与要求略有不同,比如说,我总是得到额外的space是行中的拖尾 spaces。
这是我的输出:
Leading spaces
Training spaces
Leading and trailing spaces
Only interword spaces
Leading, trailing and interword spaces
This line has correct spaces
Previous line was empty
Previous line has only leader spaces
OneWordLine
Three word line
有人可以帮我吗?
当您读到第一个 space 字符时,不要立即打印它。等待下一个非 space 字符打印它,如果你得到 EOL 字符,你就不会打印它。这是您修改后的算法:
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
do
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
has_read_space := False
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
output.putchar (Space_char) -- Print the space when reading a character
has_read_space := False
end
output.putchar (ch)
flag := 1
read_char
elseif ch = Space_char and flag = 1 then -- see space after characters
has_read_space := True -- Don't print it right now
flag := 0
read_char
elseif ch /= Space_char and flag = 1 then -- see character after character
output.putchar (ch)
read_char
end
end
flag := 0
read_char
end
-- At end of file, nothing to do in Eiffel except close the files
input.close
output.close
end
这是我的 space 移除任务的埃菲尔代码:
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
do
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
output.putchar (ch)
flag := 1
read_char
elseif ch = Space_char and flag = 1 then -- see space after characters
output.putchar (Space_char)
flag := 0
read_char
elseif ch /= Space_char and flag = 1 then -- see character after character
output.putchar (ch)
read_char
end
end
flag := 0
read_char
end
-- At end of file, nothing to do in Eiffel except close the files
input.close
output.close
end
这是示例输入:
Leading spaces
Training spaces
Leading and trailing spaces
Only interword spaces
Leading, trailing and interword spaces
This line has correct spaces
Previous line was empty
Previous line has only leader spaces
OneWordLine
Three word line
我运行代码和我得到的输出与要求略有不同,比如说,我总是得到额外的space是行中的拖尾 spaces。
这是我的输出:
Leading spaces
Training spaces
Leading and trailing spaces
Only interword spaces
Leading, trailing and interword spaces
This line has correct spaces
Previous line was empty
Previous line has only leader spaces
OneWordLine
Three word line
有人可以帮我吗?
当您读到第一个 space 字符时,不要立即打印它。等待下一个非 space 字符打印它,如果你得到 EOL 字符,你就不会打印它。这是您修改后的算法:
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
do
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
has_read_space := False
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
output.putchar (Space_char) -- Print the space when reading a character
has_read_space := False
end
output.putchar (ch)
flag := 1
read_char
elseif ch = Space_char and flag = 1 then -- see space after characters
has_read_space := True -- Don't print it right now
flag := 0
read_char
elseif ch /= Space_char and flag = 1 then -- see character after character
output.putchar (ch)
read_char
end
end
flag := 0
read_char
end
-- At end of file, nothing to do in Eiffel except close the files
input.close
output.close
end