1

パスカルで同じ行から 2 つの文字列変数を読み取ろうとしています。
2 つの文字列は空白で区切られています。

1 つの文字列のように読み取ってから、2 つの部分に分けようとしましたが、文字列が 255 文字を超えているため、問題が発生しました。

読み込もうとしている文字列は次のとおりです。

kyGOwpLobZvGynmdpiujxhUwphFsTTipuyAwpeffcckLuPouxmpQwGeMxqDoIqeWVkpdLueirlLiabfhxjnwbyMDYUfhGmlnFJdmfhtxljPqicbotSBvkKaQdsmbyrhmmSdexHjwdnecjRtzef mkhRyGOwpLobZvGynmdpiujxhUwphFsTTipuyAwpeffcckLumWbnbfdhlzFmnkkrwNsewPouxmpQwGeMxqDoIqeWVkpdLueirlLiabfhxjnwbyMDYUfhGmlnFJdmfhtxljPqicbotSBvkKaQdsmbyrhmmSdexHjwdnecjRtzeajfz`

線は常に同じ長さではなく、空のスペースは同じ場所にありません。

2番目の文字列からいくつかの文字を削除することで、最初の文字列を取得できるかどうかを調べようとしています.

例: STRING aSgasTsaRoIgfNfdsG
は肯定的な回答を返す必要があります。

これをチェックするコードは次のとおりです。

q:=1;  
for m:=1 to length(b) do  
begin  
if b[m] = a[q] then  
q:=q+1;
end;

q:=q-1;

writeln(q);

if q = length(a) then  
writeln('YES')  
else  
writeln('NO');

ここで、a は最初の文字列、b は 2 番目の文字列です。

最初の大きな文字列を 1 つの変数として読み取り、それを 2 つの部分に分割しています。
この問題は、最初の文字列が 255 文字を超える場合に発生します。そのため、同じ行から 2 つの文字列を読み取る方法を知りたいのです。

文字列を区切るために使用しているコード:

readln(x);  

x:=LONGSTRINGHERE;  
blank:=' ';
Location := Pos(blank, x);  

a:=Copy(x, 1, (Location-1));  

b:=Copy(x, (Location+1), length(x)); 
4

2 に答える 2

1

readln()を使用して行全体を読み取る代わりにread()、 type の変数を使用してchar、スペースを検出するまで一度に 1 文字ずつ最初の文字列に読み取り、次に 2 番目の文字列を読み取ることができます。

于 2012-04-05T23:53:41.207 に答える
0

freepascal コンパイラを使用して、文字列を最大 2^16 = 65536 文字の ansistring に置き換えることができます。

于 2012-04-10T02:37:09.690 に答える