delphi 如何接收一个函数返回的,长度未知的数组? 麻烦给例子,小弟新手

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 如何接收一个函数返回的,长度未知的数组? 麻烦给例子,小弟新手相关的知识,希望对你有一定的参考价值。

使用动态数组即可,即声明为“array of 基础类型”的。
首先,根据你的数组元素类型,声明一个新的类型。假设数组为整数数组,示例如下:
type
TArray_Integer = array of Integer;

function MakeRandomIntegers( var anData : TArray_Integer ) : Integer;
var
i : Integer;
begin
Result := 1 + Random( 20 );
SetLength( anData, Result );
for i := 0 to Result - 1 do
anData[i] := Random( 1000 );
end;

如调用这个函数,将会构建一个动态数组,长度随机,里面也存放着随机数,完整的调用和访问逻辑示例如下:
var
myData : TArray_Integer;
i, L : Integer;
.......
begin
L := MakeRandomIntegers( myData ); // 函数返回了随机长度,如某些函数不返回长度,也可以用Length( myData )来获取实际长度

// 注意:动态数组的下标固定地从0开始
for i := 0 to L - 1 do
ShowMessage( Format( '整数#%d: %d', [ i +1, myData[i] ] ) );
end;
参考技术A 可以传递引用,var为引用, 返回数组长度
function foo(var a:array of integer;):integer;
begin
result:=5;
end;
也可以用TList代替数据,本身支持记录长度

接收和旋转字符的函数 - 凯撒密码

【中文标题】接收和旋转字符的函数 - 凯撒密码【英文标题】:Function That Receives and Rotates Character - Caesar Cipher 【发布时间】:2017-04-21 21:32:34 【问题描述】:

我正在尝试创建一个函数

rotate_character(char, rot)

接收一个字符“char”(长度为 1 的字符串)和一个整数“rot”。该函数应该返回一个长度为 1 的新字符串,这是将 char 向右旋转 rot 位数的结果。

所以 char 的输入为“A”,rot 的输入为“13”

N

(A 的初始值为 0,B 的初始值为 1,以此类推)。轮换期间应保持资本化。

我已经创建了一个函数,它使用字典返回字母在字母表中的位置:

letter = input("Enter a letter: ")

def alphabet_position(letter):
    alphabet_pos = 'A':0, 'a':0, 'B':1, 'b':1, 'C':2, 'c':2, 'D':3,
                    'd':3, 'E':4, 'e':4, 'F':5, 'f':5, 'G':6, 'g':6,
                    'H':7, 'h':7, 'I':8, 'i':8, 'J':9, 'j':9, 'K':10,
                    'k':10, 'L':11, 'l':11, 'M':12, 'm':12, 'N': 13,
                    'n':13, 'O':14, 'o':14, 'P':15, 'p':15, 'Q':16,
                    'q':16, 'R':17, 'r':17, 'S':18, 's':18, 'T':19,
                    't':19, 'U':20, 'u':20, 'V':21, 'v':21, 'W':22,
                    'w':22, 'X':23, 'x':23, 'Y':24, 'y':24, 'Z':25, 'z':25 
    pos = alphabet_pos[letter]
    return pos  

我想我可以使用这个函数在旋转之前获取 (char) 的初始值。

def rotate_character(char, rot)
    initial_char = alphabet_position(char)
    final_char = initial_char + rot

但我的问题是,如果 initial_char + rot 大于 25,我需要回到字母表的开头并继续计数。所以“w”的输入(初始值为 22)+ rot 的输入 8 应该返回

e

我用 python 怎么说?

if final_char > 25, start at the beginning of the list and continue counting

我是否一定需要使用我在 alphabet_position 函数中创建的字典? It was also suggested 我使用 Python 的内置字母列表查找字符编号,如下所示:

import string

letter = input('enter a letter: ')

def alphabet_position(letter):
    letter = letter.lower()
    return list(string.ascii_lowercase).index(letter)

return(alphabet_position(letter))

当您在数数时必须包装时,我不确定其中哪一个是更好的选择。感谢您的帮助/建议!

编辑

现在我的代码如下所示:

letter = input("enter a letter")
rotate = input("enter a number")

def rotate(letter, rotate):
    letter = letter.lower()
    return chr((ord(letter) + rotate - 97) % 26 + 97)

print(rotate(letter))

编辑 2

def rotate(letter, number):
    letter = letter.lower()
    shift = 97 if letter.islower() else 65
    return chr((ord(letter) + number - shift) % 26 + shift)

letter = input('Enter a letter: ')
number = int(eval(input('Enter a number: ')
print(rotate(letter, number))

给了我一个 ParseError: "ParseError: bad input on line 8"(打印行)

【问题讨论】:

关于第二次编辑的错误:在print 之前的行中,括号的数量不平衡。顺便说一句:Stop using eval!number = int(input('Enter a number: '))就够了。 【参考方案1】:
def rotate(letter, rot):
    shift = 97 if letter.islower() else 65
    return chr((ord(letter) + rot - shift) % 26 + shift)

letter = input('Enter a letter: ')
rot = int(input('Enter a number: '))
print(rotate(letter, rot))

【讨论】:

这是否意味着我需要摆脱我的第一个函数alphabet_position?请参阅上面的编辑以确切了解我现在使用的内容。我试图运行它并得到一个 TypeError:“TypeError:rotate() 在第 8 行恰好需要 2 个参数(1 个给定)”。我还需要保持大写,即如果我输入 A + 13 它应该返回 N 而不是 n。 是的,这个功能是不必要的。 ord(letter) + rotate - 97 做同样的事情并旋转。然后% 26 + 97 确保chr 函数会很高兴。最重要的是,该解决方案只需要内置函数即可。无需导入。 好的,你知道为什么我会收到错误消息吗? “TypeError:rotate() 在第 8 行正好采用 2 个参数(给定 1 个)”请参阅上面的编辑了解我正在使用的内容。 我已更改答案以匹配您的代码。发生类型错误是因为rotate 需要被赋予两个值letterrotate,但在您的代码中你只给它一个rotate(letter) 应该是rotate(letter, rot) 是的。有关如何解决该名称冲突的信息,请参阅我的修订答案。我只是调用输入rot 而不是rotate【参考方案2】:

您可以使用string 模块,然后使用模运算符“环绕”字母表的末尾:

from string import lowercase

def rotate_char(char, rot):

    i = lowercase.index(char)
    return lowercase[(i + rot) % 25]

【讨论】:

以上是关于delphi 如何接收一个函数返回的,长度未知的数组? 麻烦给例子,小弟新手的主要内容,如果未能解决你的问题,请参考以下文章

delphi中的webbrowser ,如何获取网站返回状态码

delphi的tserversocket控件如何接收16进制数

如何切割长度未知的字符串的左侧部分? (带sql函数)

delphi如何接收别的程序发过来的自定义的消息

delphi将文本输入到txt文件里面

Delphi - 如何从函数返回不同的类型