Binary 二进制翻转器出现运行时/逻辑错误

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:

所以我现在正在做一个学校的项目,里面有很多二进制,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:= 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;