Binary 二进制翻转器出现运行时/逻辑错误
所以我现在正在做一个学校的项目,里面有很多二进制,2s补码和其他的基转换。我工作的一部分是一个二元鳍状肢;1变为0,0变为1。我把它写成一个函数,接收并返回一个字符串Binary 二进制翻转器出现运行时/逻辑错误,binary,freepascal,Binary,Freepascal,所以我现在正在做一个学校的项目,里面有很多二进制,2s补码和其他的基转换。我工作的一部分是一个二元鳍状肢;1变为0,0变为1。我把它写成一个函数,接收并返回一个字符串 function flipbit(inp:string) : string; var new : string; x:integer; begin writeln('new: ',new); writeln('inp: ',inp); new := ''; writeln('new assigned'); for x:
function flipbit(inp:string) : string;
var
new : string;
x:integer;
begin
writeln('new: ',new);
writeln('inp: ',inp);
new := '';
writeln('new assigned');
for x:= 1 to length(inp) do;
begin
writeln('loop started');
if strtoint(inp[x]) = 1 then
begin
new := new + '0';
writeln('0 added');
end;
if strtoint(inp[x]) = 0 then
begin
new := new + '1';
writeln('1 added');
end
else
begin
writeln('Something went wrong');
end;
end;
result := new;
end;
基本上,代码遍历1和0组成的字符串,并将它们重新写入另一个字符串,但会翻转位
我使用了inp[x]的stroint(inp是输入变量)并将其与1(作为整数而不是字符串)进行了比较
我最初只是尝试将没有整数转换的inp[x]与“1”进行比较。代码已编译,但“new”一点也没有改变。
当我尝试我现在使用的方法时,代码崩溃了
我使用了debug writeln语句来尝试缩小代码出错的范围,它似乎是if语句
如果有人能帮忙,我将不胜感激。谢谢。为什么不将接收作为整数数组,并在每个位置执行not运算?它必须是字符串?您不需要将字符转换为整数。您不需要声明局部变量,因为您已经有了“result”变量
function flipbit(inp: string): string;
var
i: integer;
begin
result := inp;
for i := 1 to Length(result) do
if result[i] = '0' then
result[i] := '1'
else
if result[i] = '1' then
result[i] := '0';
end;
另一个版本:
function flipbit(inp: string): string;
const
OTHER_VALUE: array['0'..'1'] of char = ('1', '0');
var
i: integer;
begin
result := inp;
for i := 1 to Length(result) do
if result[i] in ['0', '1'] then
result[i] := OTHER_VALUE[result[i]];
end;