读取字符串并同时使用它们(pascal)

时间:2017-09-06 01:36:05

标签: string types pascal

我正在做的程序的正常输入是5:3B2F。 ,全部插入同一行,输出将在基数5中写入3B2F。

我们已被指示将该行读为两个字符(一个用于基数,另一个用于数字)

我遇到的问题是我不知道如何通过每个角色并同时进行必要的操作,忽略“:”和“。”,然后我还必须确保从“:”到“。”的“数字”。最多包含7个字符。

同样当我将enrty作为char读取时,如果基数为数字,我会收到错误,说明预期的char但是找到了smallint

我是一名初学者,我们不允许使用数组

       num:=0;
        read(base,digits);

        while (base <> '$') and (digits < MAXLENGHT) do

如何检查数字是否为特定长度)

      begin
       num:=(num*base)+digit;

(这个过程应该重复每个数字IN“数字”(exept for:and。),我不知道该怎么做)

      writeln(num);
      read(base,digits)
      end;

1 个答案:

答案 0 :(得分:0)

使用您的示例5:3B2F 3B2F部分的基础是什么?我猜16但是肯定必须定义,不是吗?

将整个输入作为字符串读取(比如inStr: string;。 然后将字符串分成两部分(在冒号处)并使用val()函数将字符串转换为值,首先是radix: integer,然后是inValue: integer。如果第二部分是十六进制的,你需要在字符串前添加'$',否则`val()'会在字符串上窒息或者给出错误的结果。

高尚的学习过程更有趣的方法是使用一个或两个repeat - until循环和case语句从输入中提取值:

// to extract the requested radix
done := False;
i := 1;
repeat
  c := inStr[i];
  case c of
    '0'..'9': radix := radix * 10 + (ord(c) - Ord('0'));
    ':'     : done := True;
    else    //Show error invalid input and terminate
  end;
  inc(i);
  // show error if i > n, whatever n is
until done ;

// a similar loop and case for cases of characters '0'..'9', 'A'..'F' and 'a'..'f'.

为了不破坏你的作业,我留下这个让你锻炼。