1. 程式人生 > >面試題19正則表示式匹配

面試題19正則表示式匹配

題目:實現一個函式用來匹配包含‘.’和'*'的正則表示式,'.'可以代表任意字母,'*'表示他前面的字元可以出現>=0次,

#include<iostream> using namespace std; bool matchCore(char *str, char *pattern) {  if (*str=='\0'&&*pattern=='\0')  {   return true;  }  if (*str != '\0'&&*pattern == '\0')  {   return false;  }  if (*str == '\0'&&*pattern != '\0')  {   return false;  }  if (*str == *pattern || *pattern == '.')  {   if (*(pattern + 1) == '*')    return matchCore(str+1, pattern) || matchCore(str+1, pattern + 2)||matchCore(str,pattern+2);   else   {

   return matchCore(str + 1, pattern + 1);   }  }  /*else if (*pattern == '.')  {   if (*(pattern + 1) == '*')    return matchCore(str + 1, pattern) || matchCore(str, pattern + 2);   else    return matchCore(str + 1, pattern + 1);  }*/  else  {   if (*(pattern + 1) == '*')   {    return matchCore(str, pattern + 2);   }   else    return false;  } } bool match(char* str, char *pattern) {  if (str == nullptr || pattern == nullptr)   return false;  return matchCore(str, pattern); } int main() {  while (1){   char *str=new char[10];   char *pattern=new char[10];   cin.getline(str, 10);   cin.getline(pattern, 10);   cout << match(str, pattern) << endl;   delete[]str;   delete[] pattern;  }    return 0;}字串匹配,兩個穿str和pattern,第一個字母匹配時有三種情況,*str=*pattern,*pattern='.',   *str!=*pattern1.*str=*pattern    如果*(pattern+1)!='*';讓後面的子串做匹配matchcore(str+1,pattern+1);(有點動態規劃的意思?)    如果*(pattern+1)=='*' matchcore(str+1,pattern);2.*pattern='.'    如果*(pattern+1)!='*';;讓後面的子串做匹配matchcore(str+1,pattern+1)    如果*(pattern+1)=='*' matchcore(str,pattern+2)||matchcore(str+1,pattern+2)||matchcore(str+1,pattern) 分別代表情況,.*算0個字元或1個字元或2個字元,兩個字元的情況很意思(這裡調整一下或的順序可以和第一種情況合併)3.*str!=*pattern    如果*(pattern+1)=='*';;matchcore(str,pattern+2)    否則 return false;

相關推薦

試題19表示式匹配

題目:實現一個函式用來匹配包含‘.’和'*'的正則表示式,'.'可以代表任意字母,'*'表示他前面的字元可以出現>=0次, #include<iostream> using namespace std; bool matchCore(char *str, c

試題------程式設計----表示式匹配

正則表示式匹配 題目描述: JOBDU最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子

劍指offer試題53 表示式匹配

public class Solution { public boolean match(char[] str, char[] pattern) { if (str == null || p

【LeetCode & 劍指offer刷題】字串題17:19 表示式匹配(10. Regular Expression Matching)

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 19 正則表示式匹配(hard,瞭解即可) 題目描述 請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)

劍指offer 試題19表示式匹配

請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配 c

劍指offer試題19表示式匹配

題目 請實現一個函式用來匹配包括’.’和’*’的正則表示式。模式中的字元’.’表示任意一個字元,而‘*’表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如

【劍指offer】試題19表示式匹配

題目:請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。 例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab

劍指Offer試題53:表示式匹配 Java實現

/************************************************************** * Copyright (c) 2016, * All rights reserved. * 版 本 號:v1.0

【重點】劍指offer——試題53:表示式匹配

劍指offer——面試題53:正則表示式匹配 Solution1: 程式碼中的註釋寫的不是太清楚,加一點: 一、當模式中的第二個字元不是“*”時: 1、如果字串第一個字元和模式中的第一個字元相匹配,那麼字串和模式都後移一個字元,然

試題53:表示式匹配

package Chapter8; /* * '.', 任意字元 * '*', 任意次數 */ public class _53_regular_expressions_matching { p

劍指Offer——試題53:表示式匹配

正則表示式匹配 題目:請實現一個函式用來匹配包括’.’和’‘的正則表示式。模式中的字元’.’表示任意一個字元,而’‘表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹

試題:oc匹配 刪除註釋

// // 現有檔案: '/Users/gb/Documents/oc_test/test.m', // 請編寫程式,將'/Users/gb/Documents/oc_test/test.m' 檔案中所有的 取出去除,將結果寫入'test.i'中(或者用 NSLog 函式在

[Swift]LeetCode10. 表示式匹配 | Regular Expression Matching

Given an input string (s) and a pattern (p), implement regular expression matching with support for '.' and '*'. '.' Matches any single cha

表示式匹配原則

基本模式匹配 一切從最基本的開始。模式,是正則表示式最基本的元素,它們是一組描述字串特徵的字元。模式可以很簡單,由普通的字串組成,也可以非常複雜,往往用特殊的字元表示一個範圍內的字元、重複出現,或表示上下文。例如: ^once 這個模式包含一個特殊的字元^,表示該模式只匹配那些以once開頭的字串。例如

表示式匹配換行符

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

PHP 表示式---匹配模式

1、PHP 正則表示式 <一>正則表示式貪婪匹配,非貪婪匹配。 預設是貪婪匹配, 例如 ①、貪婪匹配, $str = '香腸月餅'; preg_match('/(.)</td>/',$str,$rs); print_r($rs); ②、 $str = '香腸月餅'; preg_

C# -- 表示式匹配字元之含義

原文: C# -- 正則表示式匹配字元之含義 C#正則表示式匹配字元之含義 1.正則表示式的作用:用來描述字串的特徵。 2.各個匹配字元的含義: .   :表示除\n以外的單個字元 [ ]  :表示在字元陣列[]中羅列出來的字元任意取單個 |   :表示“或”的意思

劍指offer——表示式匹配(遞迴呼叫)

當模式中的第二個字元不是“*”時: 1、如果字串第一個字元和模式中的第一個字元相匹配,那麼字串和模式都後移一個字元,然後匹配剩餘的。 2、如果 字串第一個字元和模式中的第一個字元相不匹配,直接返回false。 而當模式中的第二個字元是“*”時: 如果字串第一個字元跟模式第一個字元

常用的表示式匹配數字

匹配特殊字元 匹配中文字元的正則表示式: [\u4e00-\u9fa5] 評註:匹配中文還真是個頭疼的事,有了這個表示式就好辦了 匹配雙位元組字元(包括漢字在內):[^\x00-\xff] 評註:可以用來計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1)

SQL語句表示式 匹配(獲取) 所有表名

寫出匹配SQL語句中的所有表名,備忘記錄 折磨了好久,正則表示式如下: *\s+from\s+[\w ]*.?[\w ]*.? ?(\b\w+) ?(\b\w+) ?[\r\n\s]* 支援各種表示式 SELECT * FROM Config SELE