如下代码的输出为( ) import re s='a bc abc abbb abbbbca' re.findall('ab*',s) A. [ 'ab', 'ab', 'ab'] B. ['ab', 'abbb', 'abbbb'] C. ['a', 'ab', 'abbb', 'abbbb', 'a'] D. ['a', 'ab', 'abbb', 'abbbb'] 正确答案:C。请解释一下这题
时间: 2023-09-15 11:22:48 浏览: 166
正则表达式 `ab*` 中的 `*` 表示匹配前面的字符 `b` 零次或多次。因此,正则表达式 `ab*` 可以匹配到字符串中所有以 `a` 开头,后面跟着零个或多个 `b` 的子串。根据题目给出的字符串 `s='a bc abc abbb abbbbca'`,`re.findall('ab*',s)` 可以匹配到以下子串:
- `a`
- `ab`
- `abbb`
- `abbbb`
- `a`
因此,选项 C 是正确的,它包含了所有匹配到的子串。选项 A 和 B 都缺少了最后一个子串 `a`,而选项 D 则少了第五个子串 `abbbb`。
相关问题
字母表是 {a,b},包含 ab 子串的所有串的串写正规式是( c ) A、(ab)*ab B、(a*ba*ba*)*4.b*ab* C、(ab)*ab(ab)* D、b*a*
正确的答案是 B。
我们可以按照如下的方式来分析和解释这个正则表达式:
- (ab)*:匹配任意个数的 "ab" 子串。
- ab:匹配一个 "ab" 子串。
- (a*ba*ba*)*:匹配任意个数的 "ab" 子串,每个 "ab" 子串都可以由任意个数的 "a" 和 "b" 组成,而且中间有一个 "b"。这个子表达式的意思是可以匹配以下任意一个子串:a、ab、abb、abbb、aabb、aabbb、aaabb、aaaabb、aaaabbb、aaaaabb、aaaaabbb、等等。
- 4:指定前面的子表达式 "(a*ba*ba*)*" 必须重复出现 4 次,也就是说必须匹配 4 个 "ab" 子串。
- .:匹配任意一个字符。
- b:匹配字符 "b"。
- ab*:匹配 "a" 后面跟任意个数的 "b",也就是说可以匹配以下任意一个子串:a、ab、abb、abbb、abbbb、abbbbb、等等。
因此,这个正则表达式可以匹配的字符串包括以下几类:
- 一个 "ab" 子串。
- 重复出现 4 次的 "ab" 子串。
- 任意个数的重复出现 4 次的 "ab" 子串,中间可以插入任意字符。
- 以 "a" 开头,后面跟任意个数的 "b"。
其中,第 3 类字符串可以通过在任意两个 "ab" 子串中间插入 ".b" 来构造。
#include <iostream> using namespace std; class String { char *str; int len; public: String(char *s=NULL) { if(s) { str=new char[strlen(s)+10]; strcpy(str,s); } else str=NULL; } String(String &s) { if(s.str) { str=new char[strlen(s.str)+10]; strcpy(str,s.str); } else str=NULL; } void set(char *s) { str=s; } void show() { cout<<str<<endl; } int getLen() { return strlen(str); } void delChar(char a) { int i,j; for(i=0;i<strlen(str);i++) if(str[i]==a) { for(j=i;j<strlen(str);j++) str[j]=str[j+1]; i=i-1; } cout<<str; } ~String() { if(str) delete []str; } }; int main() { String s1,s2,s3(s1); s1.set("abccc"); s2.set("abbb"); s1.delChar('c'); s1.show(); s2.delChar('b'); s2.show(); return 0; }这个程序为什么没有结果
在这个程序中,调用 `delChar` 方法删除指定字符后,虽然在方法内部使用 `cout` 输出了结果,但程序并没有在 `main` 函数中输出任何结果。
你需要在 `main` 函数中调用 `show` 方法来输出删除指定字符后的字符串结果。例如:
```c++
int main() {
String s1,s2,s3(s1);
s1.set("abccc");
s2.set("abbb");
s1.delChar('c');
s1.show(); // 输出 "abb"
s2.delChar('b');
s2.show(); // 输出 "a"
return 0;
}
```
这样就能看到正确的输出结果了。
阅读全文