精华内容
下载资源
问答
  • 本题要求实现一函数,对给定的一字符串和两字符,打印出给定字符串中字符匹配的位置开始到与字符匹配的位置之间的所有字符。 函数接口定义: char *match( char *s, char ch1, char ch2 ); ...

    本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

    函数接口定义:

    char *match( char *s, char ch1, char ch2 );

    函数match应打印s中从ch1到ch2之间的所有字符,并且返回ch1的地址。

    裁判测试程序样例:

    在这里插入图片描述

    输入输出

    在这里插入图片描述

    c语言代码

    char *match( char *s, char ch1, char ch2 )
    {
        char a[MAXS]="",*p;//a字符数组是打印的ch1和ch2之间的字符,*p指针是返回ch1的地址
        int i=0,j=0;
        while((*(s+i)!=ch1)&&(*(s+i)!=0))//从第一个元素找起到ch1或字符串停止符'\0'停止
        {
            i++;
        }p=s+i;//p指针指向找到ch1或'\0'后s字符串后面的部分
        a[j]=*(s+i);//将ch1或'\0'给到a数组第一个元素------①
            j++;i++;
        while((*(s+i)!=0)&&(*(s+i)!=ch2))//找ch2或'\0'停止,期间复制中间字符给a数组
        {
            a[j]=*(s+i);
            j++;i++;
        }//---------②
        a[j]=*(s+i);//最后加上ch2或'\0'
       printf("%s\n",a);
        return p;
    }
    

    ①—②实际是do while循环
    灵活使用数组和指针,对相应字符串的表示方法、原理、结构需要一定的了解。
    在这里插入图片描述

    展开全文
  • 18-正则匹配数字范围

    万次阅读 2019-02-01 18:50:28
    1. 正则匹配数字范围 正则表达式是为了匹配字符而设计的,而并不是为了匹配数字,所以当你使用正则匹配指定范围...正则引擎真正处理的是字符,所以数字0对于引擎来说是一字符,而255对于引擎来说是长度为3的字符。...

    1. 正则匹配数字范围

    正则表达式是为了匹配字符而设计的,而并不是为了匹配数字,所以当你使用正则匹配指定范围内的数字的时候你需要额外小心。表达式[0-255]并不能匹配0至255之间的数字。表达式[0-255]是一个字符集,它的含义是匹配 0,1,2,5中任意一个字符,这个表达式等同于[0125]

    正则引擎真正处理的是字符,所以数字0对于引擎来说是一个字符,而255对于引擎来说是长度为3的字符。所以如何要匹配0至255中的所有数字,我们需要让引擎匹配长度为一到三之间的字符。

    表达式[0-9]可以匹配09之间的数字。`[1-9][0-9]`可以匹配1099之间的数字。这两个是最简单的。

    匹配三位整数略微复杂一点,因为我们要排除256至999之间的整数。1[0-9][0-9]可以匹配100至199。2[0-4][0-9]匹配200至249。最后25[0-5]匹配250至255。

    你可以发现当我们匹配0到255之间的整数时,我们需要按照字符的长度来分割这个范围。在匹配三位整数的时候,如果百位是 1 ,那么十位和个位允许出现 0 至 9 之间的10个字符,如果百位是 2 ,那么十位和个位的字符将进一步做限制。

    把前面三个部分用选择符连接起来,我们就得到了0只255之间所有的整数:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]。这个方法还存在一个缺陷:正则表达式通常允许部分匹配,所以这个表达式可以匹配到 12345 中的 123。有两个方法可以解决这个问题。

    2. 搜索指定长度的字符

    如果你在一个文档中所搜数字,你可以使用词语边界锁定数字的范围:\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b。因为选择符的优先级是最低的,所以我们要在选择外加上括号。这样引擎会先匹配第一个边界符\b,然后匹配整个选择符,最后匹配最后一个\b

    3. 验证指定长度的字符

    如果你想验证用户输入内容,那么或许你想验证的是用户输入的完整内容,而不是其中的部分。你可以使用位置字符^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$

    以下一些常用的数字匹配。

    • 000…255: ^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$
    • 0 or 000…255: ^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$
    • 0 or 000…127: ^(0?[0-9]?[0-9]|1[01][0-9]|12[0-7])$
    • 0…999: ^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$
    • 000…999: ^[0-9]{3}$
    • 0 or 000…999: ^[0-9]{1,3}$
    • 1…999: ^([1-9]|[1-9][0-9]|[1-9][0-9][0-9])$
    • 001…999: ^(00[1-9]|0[1-9][0-9]|[1-9][0-9][0-9])$
    • 1 or 001…999: ^(0{0,2}[1-9]|0?[1-9][0-9]|[1-9][0-9][0-9])$
    • 0 or 00…59: ^[0-5]?[0-9]$
    • 0 or 000…366: ^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-6])$
    展开全文
  • 一.需求描述  今天朋友咨询一正则的需求,对于连续超过3个数字进行输出,如果有多连续数字,都需要输出。  例如 123abc1234 输出为 123.1234,中间用’.'...[0-9]{3,} 是匹配连续3个及以上数字。 代码: with tmp

    一.需求描述

     今天朋友咨询一个正则的需求,对于连续超过3个数字进行输出,如果有多个连续数字,都需要输出。
     例如 123abc1234 输出为 123.1234,中间用’.'进行分隔。

    二.解决方案

    2.1 Oracle解决方案

    看到这个需求,首先想到的是使用Oracle 正则表达式的regexp_replace函数了。

    多个匹配表达式用()进行关联,例如(.*?)([0-9]{3,})
    其中 *? 是匹配0次或多次,非贪婪模式。
    [0-9]{3,} 是匹配连续3个及以上数字。

    代码:

    with tmp1 as
    (
    select 'abc12' str from dual
    union 
    select 'abc123' str from dual  -- OK 
    union
    select '1234abc333' str from dual
    )
    select regexp_replace(str,'(.*?)([0-9]{3,})(.*?)', '\2.') str_new
       from tmp1
         where regexp_like(str,'[0-9]{3}')
    

    测试记录:

    SQL> with tmp1 as
      2  (
      3  select 'abc12' str from dual
      4  union
      5  select 'abc123' str from dual  -- OK
      6  union
      7  select '1234abc333' str from dual
      8  )
      9  select regexp_replace(str,'(.*?)([0-9]{3,})(.*?)', '\2.') str_new
     10     from tmp1
     11       where regexp_like(str,'[0-9]{3}')
     12  /
    STR_NEW
    --------------------------------------------------------------------------------
    1234.333.
    123.
    

    2.2 MySQL 解决方案

     用MySQL 8.0版本进行测试,发现MySQL不支持()这种集合的方式,我找到了一种更为简便的解决方案,使用regexp_replace函数。

    代码:

    with tmp1 as
    (
    select 'abc12' str from dual
    union 
    select 'abc123' str from dual  -- OK 
    union
    select '1234abc333' str from dual
    )
    select regexp_replace(str,'[^0-9]{1,}', '.') str_new
       from tmp1
         where regexp_like(str,'[0-9]{3}')
    

    测试记录:

    mysql> with tmp1 as
        -> (
        -> select 'abc12' str from dual
        -> union
        -> select 'abc123' str from dual  -- OK
        -> union
        -> select '1234abc333' str from dual
        -> )
        -> select regexp_replace(str,'[^0-9]{1,}', '.') str_new
        ->    from tmp1
        ->      where regexp_like(str,'[0-9]{3}')
        -> ;
    +----------+
    | str_new  |
    +----------+
    | .123     |
    | 1234.333 |
    +----------+
    2 rows in set (0.00 sec)
    
    展开全文
  • java实现五届蓝桥杯信号匹配

    万次阅读 多人点赞 2019-07-29 19:56:57
    X星球接收了一数字信号序列。 现有一已知的样板序列。需要在信号序列中查找它首次出现的位置。这类似于串的匹配操作。 如果信号序列较长,样板序列中重复数字较多,就应当注意比较的策略了。可以仿照串的...
     信号匹配  
    
    从X星球接收了一个数字信号序列。
    
        现有一个已知的样板序列。需要在信号序列中查找它首次出现的位置。这类似于串的匹配操作。
    
        如果信号序列较长,样板序列中重复数字较多,就应当注意比较的策略了。可以仿照串的KMP算法,进行无回溯的匹配。这种匹配方法的关键是构造next数组。
    
        next[i] 表示第i项比较失配时,样板序列向右滑动,需要重新比较的项的序号。如果为-1,表示母序列可以进入失配位置的下一个位置进行新的比较。
    
        下面的代码实现了这个功能,请仔细阅读源码,推断划线位置缺失的代码。
    
    // 生成next数组 
    int* make_next(int pa[], int pn)
    {
        int* next = (int*)malloc(sizeof(int)*pn);
        next[0] = -1;
        int j = 0;
        int k = -1;
        while(j < pn-1){
            if(k==-1 || pa[j]==pa[k]){
                j++;
                k++;
                next[j] = k;
            }
            else
                k = next[k];
        }
        
        return next;
    }
    
    // da中搜索pa, da的长度为an, pa的长度为pn 
    int find(int da[], int an, int pa[], int pn)
    {
        int rst = -1;
        int* next = make_next(pa, pn);
        int i=0;  // da中的指针 
        int j=0;  // pa中的指针
        int n = 0;
        while(i<an){
            n++;
            if(da[i]==pa[j] || j==-1){
                i++;
                j++;
            }
            else
                __________________________;  //填空位置
            
            if(j==pn) {
                rst = i-pn;
                break;
            }
        }
        
        free(next);
            
        return rst;
    }
    
    int main()
    {
        int da[] = {1,2,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,1,2,1,2,3};
        int pa[] = {1,2,1,1,2,1,1,1,2};
        
        int n = find(da, sizeof(da)/sizeof(int), pa, sizeof(pa)/sizeof(int));
        printf("%d\n", n);
        
        return 0;
    }
    
    
    
    注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)
    
    
    
    j = next[j]
    
    展开全文
  • 最近在工作中遇到一这样的接口测试问题,需要删除已有的free_id并更新已有的free_id, 之前的做法: 1、先调用获取所有free_id的接口,在下面写一条正则匹配匹配所有free_id 2、然后调用删除接口,free_id...
  • 使用match它时,如果没有设置全局标志 (g),数组的 0 元素包含整个匹配,而 1 到 n 元素包 含了匹配中曾出现过的任一匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局 标志,元素 0 到 n 中包含...
  • ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次 + 表示匹配 一次到多次 (至少有一次) ? 表示匹配零次或一次 ...
  • 正则表达式(匹配第花括号)

    万次阅读 2018-09-05 22:35:32
    学习正则,工作中使用正则让我对“^”有了新的认知: ...如下图所示,需要匹配第花括号前的地址 [^}] 除了“}”以外的任何字符 [^}]* 0或多非“}”的字符 ^[^}]* 左向右匹配非“}”的多字符 ...
  • 分享一下我前段时间写的匹配...弱 6-16位 数字,字母,字符其中一种 或 6-7位 数字,字母,字符其中两种 或 6-7位 数字,字母,字符其中种 中 8-16位 数字,字母,字符其中两种 强 8-14位 数字,字母,字符其中
  • 如利用正则匹配到“受到xx影响”,则删除字符串所在行,并返回2877,2881。 a.txt内容如下: 2877 a3 1-1 9:16,部分地区受到雾霾影响出行不便。 2878 a2 1-1 9:42,床前明月光,疑是地上霜。 2880 a2 1-1 10:09,...
  • 在本文中,您将学习如何在正则表达式中匹配数字和数字范围。正则表达式编号范围包括0到9、1到9、0到10、1到10、1到12、1到16和1-31、1-32、0-99、0-100、1-100, 1-127、0-255、0-999、1-999、1-1000和1-9999。 关于...
  • 正则在线测评验证1.匹配qq邮箱:[1-9][0-9]+@qq.com 或者[1-9]\d+@qq.com分析:qq...那我们再深入一点,我们已知qq号是10000开始的,那么我们对上述的匹配规则可以做进一步修改为:[1-9][0-9]{4,}@qq.com这...
  • 头疼的匹配同一数字或字母出现3次的字符串的正则终于知道了。在gp下的表示: string ~ '[0-9a-zA-Z]\\1{2}' \1 表示 匹配连续的相同字符 {2} 表示 匹配了两次 string 表示表中的字段 已在数据库中验证过...
  • #如何用python写一正则表达式,匹配3 位就有一逗号的数字(千分号)? 这是《Python编程快速上手 让繁琐工作自动化》正则表达式这一章的习题 下午摸索了半天,本身对正则不是特别了解,之前接触过一些,近几...
  • php 正则匹配字符串中的所有数字

    千次阅读 2015-10-20 23:32:56
    php 正则匹配字符串中的所有数字 function isHaveKC($str){ preg_match_all('/\d+/',$str,$arr...1-4周 14-18周");  执行结果: Array ( [0] =&gt; Array ( [0] =&gt; 1 [1] =&gt; 4 [2...
  • 正则表达式 匹配 数字 范围

    千次阅读 2011-05-10 14:20:28
    今天要写一正则表达式,来做前端校验... 分析:1数字是1~9,后面的可以出现0~9的数字,最多2位。于是,就有了下面的字符串:   "[1-9]\\d{0,2}+"   2、4位数的,要小于等于4095,即数字范...
  • 使用jquery的replace时,发现只默认替换到个匹配数据。 string str =“12333” 1、替换: string end =str.replace(3,"2") 结果:12233 2、替换全部匹配内容: string end =str.replace(/...
  • 使用 ? 字符,正则表达式默认使用贪婪匹配,即尽可能...可只匹配第符合的数字,如 123123 使用 (.) 匹配则group(1)为12323 使用(.?)则会匹配到group(1)-group(6) 内容分别为"1",“2”,“3”,“4”,“5”,“6” ...
  • JavaScript 技术篇-js正则表达式匹配中英文数字。...中文是 Unicode 编码表示的,而 \u4e00 表示中文在 Unicode 里的编号,而 \u9fa5 表示最后一中文在 Unicode 里编号。 /[0-9]/ 表示包含 数字。
  • excel中vlookup中的开头字母匹配

    千次阅读 2016-04-06 14:13:04
    VLOOKUP的作用想必大家都是知道...现在有一问题了,如果要匹配的值可能只有前面几字母或者中文是一样的怎么办呢。其实可以这样: =VLOOKUP(LEFT(C1,2)&"*",A:B,2,FALSE)。看到是取C1格的左边两字符,然后&
  • 近期收到朋友的一需求,需要在一堆字符串中查找连续3个数字的字符,连续数字可能出现在开头、中间、结尾,而且如果连续数字超过3个,也不符合条件。 二.解决方案 2.1 Oracle解决方案 ^ 匹配每一行的开头,单行模式...
  • xpath获取匹配到的元素

    千次阅读 2019-11-27 17:43:35
    (//span[text()=‘匹配’])[2]
  • 经过两天的挣扎,终于“写出了”属于自己的java版的SIFT算法,于是兴高采烈...经过再三检查,发现有四地方和lowe做的不一样: 1、lowe先对原图进行插值放大处理,我没有。但是这只影响特征点的数目。 2、lowe的每一层
  • sed匹配第N进行替换

    千次阅读 2018-12-04 15:11:23
    第二命令和上面第一其实是一样的原理,全部读入文本后统一替换第3个匹配的内容。 替换最后一个匹配的88为--: sed ':a;/\n88/!{$s/88/--/;N;ba};P;D' file sed ':a;N;$!ba;s/(. )88/\1--/' file [解析] 第一...
  • 现在想取n通道符(|)到(n+1)通道符之间的内容,能不能仅通过正则表达式一步得出?其中反斜杠表示转义,即反斜杠+通道符仅仅是一特殊字符,不能看作一通道符。 我打算取数据,所以写了这样一...
  • 正则表达式-匹配数字范围

    万次阅读 2016-10-26 14:20:53
    最近有需求就是根据产品编号批量下架产品,需要下架日期为16-31号之间的产品, 比如编号为B201607280023匹配表达式如下: ^201607(1[6-9]|2[0-9]|3[0-1]).+逻辑很简单,如果是必须是1或2或3开头,如果是1开头则...
  • 1、awk只处理个匹配的行,匹配后使用exit命令退出处理: awk '/version/{print $1;exit;}' input.txt 处理3个匹配行后结束处理: awk '/aa/{i++;if(i 2、只处理指定的行。NR表示输入文件的行号 awk 'NR...
  • 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一串是否含有某种子串、将匹配的子串替换或者某个串中取出符合某个条件的子串等。 换句话来说,正则表达式可以按照模式条件...
  • 正则表达式:匹配单个数字重复n次

    千次阅读 2019-09-22 14:49:21
    匹配单个数字重复n次:(\d)\1{n-1}其中,\d表示一位数字,(\d)表示匹配之后捕获该匹配,并分组并对组进行编号\1表示被捕获的分组{n-1}是因为被捕获的分组已经消耗了一位数字,因此要减1。 注意:用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,354,910
精华内容 541,964
关键字:

从第三个字开始匹配