我有这个任务要做:编写一个程序,打开文本文件cypher.txt并创建2个输出文件。输出文件first.txt将包含所有偶数单词和空格字符,而不是奇数单词。空格字符数等于奇数字的字母数。输出文件second.txt将包含所有奇数单词和空格字符,而不是偶数单词。如果我们打印文件first.txt并随后在同一张纸上提交second.txt,它们应合并到原始文本中。
我的代码:
(((((192 << 8) | 43) << 8) | 244) << 8) | 18 =
= 11000000001010111111010000000000 | 18 =
= 11000000001010111111010000000000 |
00010010 =
= 11000000001010111111010000010010
但我的程序只创建了两个空文件而没有别的......问题在哪里?
答案 0 :(得分:1)
这是非常混乱的代码,并且goto语句完全没有必要,因为它们位于循环点的旁边,因此您可以简单地使用多个条件。备查; goto语句通常保留用于转义极大的嵌套循环;甚至这被认为是不良编码实践,应该避免。
您可以使用此行来删除您的第一个goto语句:
Until (j = count-1) or (letter[j-1] = ' ');
第二个也可以通过简单地将其包含在另一个循环中来避免:
Repeat //instead of start label
//rest of your code here
Repeat
Read (cyp, letter[j]);
//etc
Until (j = count-1) or (letter[j - 1] = ' ');
Until (letter[j - 1] <> ' ');
{this condition is inverted from the previous one because you want
to escape the inner loop with the second condition but not the outer one.}
你的代码看起来好像你实际上试图找到偶数字母和奇数字母,而不是你所说的字,所以我会按照这个假设运行。
空文件的问题是无关的。
可能不正确的行是:
ReadLn(sent);
据我了解,您更可能想要:
Readln(cyp, sent);
否则,当控制台弹出时,按Enter键将其关闭,count设置为0,因此程序无法执行您想要的操作。
答案 1 :(得分:0)
我不想做你的作业,但这个小程序应该引导你走的路。
program so_29919709;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
function IfThen( const ACondition: Boolean; const ATrueArg, AFalseArg: Char ): Char;
begin
if ACondition then
Result := ATrueArg
else
Result := AFalseArg;
end;
procedure SplitText( const AStr: string; out AEvenStr, AOddStr: string );
var
LChar: Char;
LIsEven: Boolean;
begin
LIsEven := False;
// loop through the text char by char
for LChar in AStr do
begin
// append the char to the output depending on even state
AEvenStr := AEvenStr + IfThen( LIsEven, LChar, ' ' );
AOddStr := AOddStr + IfThen( LIsEven, ' ', LChar );
// Toggle the even state if needed
if LChar = ' ' then
LIsEven := not LIsEven;
end;
end;
procedure Test;
var
LCipherStr, LEvenStr, LOddStr: string;
begin
LCipherStr :=
{} 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam '
{} + 'nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam '
{} + 'erat, sed diam voluptua. At vero eos et accusam et justo duo '
{} + 'dolores et ea rebum.';
Writeln( 'CipherStr:' );
Writeln( '==========' );
Writeln( LCipherStr );
WriteLn;
SplitText( LCipherStr, LEvenStr, LOddStr );
Writeln( 'EvenStr:' );
Writeln( '========' );
Writeln( LEvenStr );
WriteLn;
Writeln( 'OddStr:' );
Writeln( '=======' );
Writeln( LOddStr );
WriteLn;
end;
begin
try
Test;
except
on E: Exception do
Writeln( E.ClassName, ': ', E.Message );
end;
ReadLn;
end.
这是生成的输出:
CipherStr: ========== Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At v ero eos et accusam et justo duo dolores et ea rebum. EvenStr: ======== ipsum sit consetetur elitr, diam eirmod invidunt labore dolore aliquyam sed voluptua. v ero et et duo et rebum. OddStr: ======= Lorem dolor amet, sadipscing sed nonumy tempor ut et magna erat, diam At eos accusam justo dolores ea