我需要帮助解决这个问题。我需要多次重复某个字符串。例如string' hello'应该重复3次输出如下:hellohellohello
我需要做的是让用户输入一个整数,然后是另一个(n)。程序将重复第一个整数n次。例如:11 3:111111
该输出应该是整数,可以与另一个整数进行比较。 所以我认为我必须输入整数,将其转换为字符串,重复字符串n次并将新字符串放入整数变量,然后将其与我需要的相比较。
有什么建议吗?
编辑:发生了另一个问题:显然我的代码不能使用任何用途。那怎么能和他们一起完成呢?
答案 0 :(得分:2)
您可以使用StrUtils单元中的DupeString
函数:
program duplicatestring;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, StrUtils
{ you can add units after this };
begin
writeln(DupeString('hello', 5));
Readln;
end.
显然,我已经对字符串进行了硬编码'你好'在这个例子中有5个重复,但你可以从用户输入或任何你喜欢的地方获得字符串和重复计数。你可以编写自己的字符串函数,通过内部调用DupeString
来生成给定字符串的N个重复。
我建议您查看DupeString
的源代码,了解其实现方式,然后尝试其他方法,例如:使用for
,while
或repeat untiil
循环。
重新使用"没有使用"更新,`DupeString'的源代码显示了一种方法:
Function DupeString(const AText: string; ACount: Integer): string;
var i,l : SizeInt;
begin
result:='';
if aCount>=0 then
begin
l:=length(atext);
SetLength(result,aCount*l);
for i:=0 to ACount-1 do
move(atext[1],Result[l*i+1],l);
end;
end;
基本上,SetLength
为ACount
AText
个move
个副本分配足够的空间,然后将AText
个ACount
个内容复制到已分配的空间{ {1}}次,函数结果告诉调用者在哪里找到堆分配的内容(因为H +编译器指令 - 如果使用H-,结果会以不同的方式返回,因为这会使编译器使用旧式,长度字节前缀的Pascal字符串)。
另一种方式是
function MyDupeString(const AText: string; ACount: Integer): string;
var i: SizeInt;
begin
result:='';
for i := 1 to ACount do
Result := Result + AText;
end;
代码少得多,但效率却低得多,因为for
循环的每次迭代都会导致函数结果的新堆分配和前一个的重新分配。
使用Pascal for
循环可以做任何事情,你可以使用while .. do
或repeat until
循环。挑战:看看你是否可以编写自己使用MyDupeString
循环的while
,并将其作为答案给你设置此任务的人。
答案 1 :(得分:1)
所以源代码如下所示:
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, StrUtils
{ you can add units after this };
var
n,i:integer;
dvojice:array[1..80,1..80] of integer;
dvojicestr:array[1..80,1..80] of string;
dvojicestr1:array[1..80,1..80] of string;
dvojiceint:array[1..80,1..80] of integer;
begin
readln (n);
for i:=1 to n do begin
read (dvojice[i,1],dvojice[i,2],dvojice[i,3],dvojice[i,4]);
dvojicestr[i,1]:=inttostr(dvojice[i,1]);
dvojicestr1[i,1]:=dupestring(dvojicestr[i,1],dvojice[i,2]);
dvojicestr[i,2]:=inttostr(dvojice[i,3]);
dvojicestr1[i,2]:=dupestring(dvojicestr[i,2],dvojice[i,4]);
dvojiceint[i,1]:=strtoint(dvojicestr1[i,1]);
dvojiceint[i,2]:=strtoint(dvojicestr1[i,2]);
end;
writeln (dvojiceint[1,1]);
writeln (dvojiceint[1,2]);
writeln (dvojiceint[1,2]+dvojiceint[1,1]);
readln;
readln;
end.
我相信它可以更高效,那些阵列是如此之大,因为我并不知道我需要它们有多大。变量的名称是我的母语,需要这样做才能让老师阅读。最后一部分仅用于检查它是否正常工作。