字符串/字符串连接

时间:2015-03-05 21:52:06

标签: queue pascal

我必须将STRING变量与CHAR计数器连接,但Pascal返回“arg no.1的不兼容类型:获得SHORTSTRING,预期CHAR”。我正在使用队列,这是代码:

program routes;
uses    crt, queues;
type    graph = array['A'..'E','A'..'E'] of integer;
const   G : graph = ((0,1,0,0,0),
                     (0,0,1,1,1),
                     (0,0,0,1,1),
                     (1,0,1,0,0),
                     (0,0,1,0,0));

procedure bfs(x,y : char; var G : graph);
var f : queue;
    r : string;
    i : char;
begin
    startq(q);
    enqueue(x,q);
    while not emptyq(q) do
        begin
            r := unqueue(q);
            x := r[length(r)];
            if x = y then
                writeln(r)
                    else for i := 'A' to 'E' do
                        if(G[x,i] = 1) and (pos(i,r) = 0) then
                            enqueue(r + i,q);
        end;
    end;

    begin
        bfs('A','E',G);
        readln;
    end;
end.

第25行出现错误:入队(r + i,q);

提前致谢。

修改

“入队”的程序是:

procedure add(var n : integer); 
begin 
    if n < max then 
        inc(n);
    else n := 1; 
 end; 
 procedure enqueue(x : titem; var f : queue); 
 begin 
     if fullq(q) then err('Queue overload!'); 
         q.item[q.last] := x; 
         add(q.last);
         inc(q.total); 
  end; 

修改

添加单位的界面:

unit queues;

interface

    const max = 50;
    type titem = char;
    type queue = record
                     first, last, total : integer;
                     titem : array[1..max] of titem;
                 end;

1 个答案:

答案 0 :(得分:0)

如上所述,没有enqueue的定义,这很难判断,但你的程序调用

 enqueue(x,q);

一旦x是CHAR

类型

以后

 enqueue(r + i,q);

其中r + i是串联,因此是字符串类型。这意味着入队程序需要重载

你没有提到使用过的编译器,但如果是turbo pascal,这就是问题,因为turbo pascal不支持重载。