首页 > 编程语言 >教算法用awk比PASCAL强

教算法用awk比PASCAL强

时间:2022-12-23 19:11:14浏览次数:77  
标签:ptn ary 算法 PASCAL awk split str printf

请看KMP代码:

function KMP(s, m, p, n) {
  if (n == 0 || m == 0) return;
  split(s, str, ""); split(p, pattern, "");
  # https://www.tutorialspoint.com/awk/awk_string_functions.htm
  # split返回的数组,[0]是"",所以下面是PASCAL版
  # https://blog.csdn.net/idler/article/details/4846
  j = 1; k = 0;
  while (j < n) {
    if ( k == 0 || pattern[j] == pattern[k] ) {
        j = j + 1; k = k + 1;
        na[j] = k; /* next是关键字 */
    }
    else k = na[k];
  }
  for (i = j = 1; i <= m;) {
    # 不支持,表达式,不支持//
    if ( j == 0 || str[i] == pattern[j] ) { i++; ++j; }
    else j = na[j];
    if (j > n) { printf("%d\n", i - n - 1); j = 1; }
  }
}
BEGIN {
  # awk doen't support variables local to functions
  _str = "AABACAABAAAABAA12345AABAA";
       _ptn = "AABAA";
  m = length(_str); n = length(_ptn); # m长得像nn, 所以比较长
  KMP(_str, m, _ptn, n);
}

数组是关联数组/map:

BEGIN {
  str = "a b\tc  de" # 语句不用;结尾
  split(str, ary, "[ \t]+") # C还得用外部库
  for (i in ary) printf("%d %s\n", i, ary[i])
  print # 比puts(""); 短
  for (i = 0; i < length(ary); i++) printf("%d %s\n", i, ary[i])
  ary["tom"] = "cat"; ary[3.14] = 5678 # 关联数组/map
  print; print(ary["tom"], ary[3.14])
}

MadEdit有语法高亮:

gawk -f t.awk

https://files.cnblogs.com/files/blogs/714801/gawk.7z 176KB 含且仅含 gawk.exe 461KB

标签:ptn,ary,算法,PASCAL,awk,split,str,printf
From: https://www.cnblogs.com/funwithwords/p/17001210.html

相关文章

  • 基于QT的TCP传输拆包和组包算法
    什么是TCP传输的粘包,以及为什么要拆包组包就不仔细叙述了,简而言之就是TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,数据的顺序和内容都是可靠的,但因为是机遇字......
  • 如何对算法进行测试?
    1、正确性;一个好的算法必需能够正确的执行要求的功能和性能要求。这要求我们对一个算法进行功能测试和性能测试。2、可用性;一个好的算法能够很方便的使用。测试算......
  • x264改变输出分辨率的算法
    在某些应用场景下,x264的输入视频分辨率与接收端输出的视频分辨率不同。例如编码端摄像头采集到的YUV数据为1280x720,而接收端视频显示窗口为640x480。对于这种场景,一般的处......
  • BFS,DFS算法
    算法题目  基础:1.数组2.字符串3.排序4.贪心5.递归6.循环7.滑窗8.栈9.进制转换10.位运算11.队列12.哈希表13.链表14.线性表15.二分查找......
  • 青蛙过河算法
    Asmallfrogwantstogettotheothersideofariver.Thefrogisinitiallylocatedononebankoftheriver(position0)andwantstogettotheoppositeba......
  • C#-A*算法原理及代码实现
    前面提到过迪杰斯特拉算法,它的原理简述如下:1.将所有的点放在B集合。(起点距离为0,其他点为无穷大)2.从B集合找出距离最小的点,取走并放在A集合。3.根据A集合的新加入的点,......
  • 决策树算法
     ......
  • k近邻算法api初步使用
     ......
  • 排序算法模板(更新中)
    快速排序#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intn;intq[N];voidposition(intq[],intl,intr){if(l>=r)ret......
  • 美颜SDK一键美颜的算法实现流程
    大家在使用美颜sdk时肯定用到过“一键美颜”这个功能,而一键美颜中又分为许多风格,从另一个角度来看,这更像是美颜sdk滤镜。总体来讲,一个效果比较好的“一键美颜”会涉及各种各......