回复:1200 如何判断数组内是否存在重复值?

已锁定

手机用户20210913591569

  • 帖子

    4
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2021-09-13

普通 普通 如何晋级?

发布于 2024-05-29 16:31:50

2楼

FUNCTION_BLOCK UniqueAlphabetArray

VAR

    MyCode: ARRAY[0..25] OF CHAR; // 字符类型的数组,下标从0到25,对应26个英文大写字母

    AlphabetCount: ARRAY[0..25] OF INT; // 记录每个字母出现的次数

    Alphabet: CHAR := 'A'; // 当前处理的字母

    Index: INT; // 当前处理的字母在数组中的索引

    i: INT; // 循环变量

END_VAR


// 初始化字母计数数组

FOR i := 0 TO 25 DO

    AlphabetCount[i] := 0;

END_FOR;


// 循环遍历MyCode数组,确保每个字母只出现一次

FOR i := 0 TO 25 DO

    // 将当前处理的字母放入MyCode数组

    MyCode[i] := Alphabet;


    // 获取当前处理字母在数组中的索引

    Index := BYTE_TO_INT(Alphabet) - BYTE_TO_INT('A');


    // 检查当前处理字母是否已经出现过

    IF AlphabetCount[Index] = 1 THEN

        // 如果已经出现过,则找到下一个未出现的字母

        REPEAT

            Index := (Index + 1) MOD 26; // 使用取模运算确保索引循环在0到25之间

            Alphabet := CHAR_TO_BYTE(BYTE_TO_INT('A') + Index); // 更新当前处理的字母

        UNTIL AlphabetCount[Index] = 0;

    END_IF;


    // 标记当前处理字母已经出现过

    AlphabetCount[Index] := 1;


    // 找到下一个未出现的字母

    Index := (Index + 1) MOD 26; // 使用取模运算确保索引循环在0到25之间

    Alphabet := CHAR_TO_BYTE(BYTE_TO_INT('A') + Index); // 更新当前处理的字母

END_FOR;


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15119条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。