c03-基础定义,技巧,打印乘法表

本文介绍了C++编程中的一些实用技巧,包括按位异或的应用、不使用中间变量进行变量交换、计算整数中1的个数的方法、运算符优先级规则、变量初始化与赋值的区别、使用time(0)获取时间戳、处理cout缓冲区问题、循环打印九九乘法表、随机数生成及sleep函数用法,并对比了C与C++中null的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.^按位异或,相同为0相异为1

2.不使用中间变量交换变量的值:a=a^b; b=a^b; a=a^b;

3.计算数中1的个数:

 

int fun(const int i)

{

int count = 0;

while(i>0)

{

i&=(i-1);

++count;

}

return count;

}

4.运算符号优先级:

前三:括号,成员,单目(需要变量为几的运算符为几目运算符)

后三:三目,赋值,逗号

5.变量初始化:int a = 5; 赋值:int b; b = 5;

6.左值:变量或结果是变量的式子,等号左边

7.time(0)函数结果为:1970.1.1 00:00:00~现在的秒数,头文件<ctime>

8.cout缓冲区的问题和cerr

cout有缓冲区可以cout.flush()或cout<<flush清空缓冲区强制输出;,cerr报错使用要立即输出

9.for(;;)比while(1)效率高一些,for不用比较,while需比较

10.一层循环打出99表

for(int i = 1, j = 1; i <= 9 && j <= 9; ++i)

{

cout<<i<<"*"<<j<<"="<<i*j;

if (i < j)

cout<<",";

else

{

cout<<'\n';

++j;

i = 0;

}

}

11.srand(time(0)); rand(); 头文件<cstdlib>

12.linux中sleep(i)的i为秒,头文件<unistd.h>

13.c和c++中null的区别:

null为空字符('\0'); c中定义NULL为(void*)0;可隐式转换为其他类型的指针; c++中定义NULL为0;C++中void*无法自由隐式转换为其它类型的指针,而字面量0可以隐式转换为指针类型;

<think>嗯,用户想用正则表达式匹配一个特定的<p>标签里的内容,具体是ID: C03-SS-001-0222。首先,我需要分析这个字符串的结构,看看需要匹配的模式是什么样的。 首先,整个字符串是包裹在<p>和</p>里的,所以正则表达式需要包含这两个标签。然后里面的内容是“ID: ”后面跟着一个特定的编码。编码的格式看起来像是C03-SS-001-0222,可能有固定的结构。 分解一下这个ID的结构。开头是字母C,接着两位数字03,然后是连字符,接着是两个字母SS,再连字符,三位数字001,再连字符,最后四位数字0222。所以整体格式可能是C后面两位数字,接着是连字符,两个字母,连字符,三位数字,连字符,四位数字。 接下来,我需要考虑正则表达式的各个部分。首先匹配<p>,然后ID: 是固定文本,然后是具体的编码部分。编码部分的第一部分是C加上两位数字,可以用C\d{2}表示。接着是连字符,然后是两位大写字母,可以用-[A-Z]{2}。然后是连字符和三位数字,即-\d{3}。再一个连字符和四位数字,即-\d{4}。所以整个编码部分的正则表达式可能是C\d{2}-[A-Z]{2}-\d{3}-\d{4}。 然后需要考虑整个字符串的结构,即<p>ID: 加上编码部分</p>。要注意空格的问题,ID: 后面可能有一个空格,所以正则表达式里需要包含这个空格。同时,标签<p>和</p>需要正确匹配,可能会有大小写的问题,但通常HTML标签是大小写不敏感的,不过用户给的例子是小写的,所以还是按照小写处理。 所以完整的正则表达式可能是:<p>ID: C\d{2}-[A-Z]{2}-\d{3}-\d{4}</p>。不过需要转义斜杠,或者在正则表达式中使用正确的语法。另外,是否需要考虑可能有其他空格或者多余的内容?用户给的例子中ID后面是精确的格式,可能不需要处理其他情况,但为了严谨,可以限制整个内容只有这个ID,没有其他文本。 另外,是否需要使用非贪婪匹配?比如,确保在<p>和</p>之间没有其他标签或内容。如果确定只有这个ID,可以使用^和$来锚定开始和结束,或者用.*?来避免匹配到多余的内容,但在这个例子中可能不需要,因为结构很固定。 测试一下正则表达式是否正确。比如,对于<p>ID: C03-SS-001-0222</p>,正则表达式应该能正确匹配。还要考虑是否有其他可能性,比如数字部分是否有前导零,但根据例子中的情况,是允许前导零的,所以用\d是正确的。 总结一下,正则表达式应该是:<p>ID: C\d{2}-[A-Z]{2}-\d{3}-\d{4}</p>。不过需要注意转义的问题,比如在代码中可能需要用反斜杠转义,比如在JavaScript中要用/\<p\>ID: C\d{2}-[A-Z]{2}-\d{3}-\d{4}\<\/p\>/,不过可能不需要,具体看语言的要求。此外,可能需要使用^和$来确保整行匹配,避免部分匹配。 可能还需要考虑是否有额外的空格或者其他分隔符,但根据用户提供的例子,应该是严格的格式。所以最终的正则表达式可能就是这样。</think>要使用正则表达式匹配 `<p>ID: C03-SS-001-0222</p>`,可以按照以下步骤分析: --- ### **1. 分解目标字符串结构** 原字符串结构为: ``` <p>ID: C03-SS-001-0222</p> ``` 包含以下固定模式和变量: - **固定部分**:`<p>ID: ` 和 `</p>` - **可变部分**:`C03-SS-001-0222`(由字母、数字和连字符组成) --- ### **2. 提取可变部分的模式** 分析 `C03-SS-001-0222`: - `C`:固定字母 - `03`:两位数字 - `SS`:两位大写字母 - `001`:三位数字 - `0222`:四位数字 对应正则表达式规则: - `C\d{2}`:`C` 后跟两位数字 - `-[A-Z]{2}`:连字符后跟两位大写字母 - `-\d{3}`:连字符后跟三位数字 - `-\d{4}`:连字符后跟四位数字 --- ### **3. 构建完整正则表达式** 将固定部分和可变部分结合,最终正则表达式为: ```regex <p>ID: C\d{2}-[A-Z]{2}-\d{3}-\d{4}</p> ``` --- ### **4. 优化与验证** - **转义字符**:根据编程语言可能需要转义斜杠(如 JavaScript 需写成 `\<p\>`)。 - **严格匹配**:添加 `^` 和 `$` 确保匹配整行: ```regex ^<p>ID: C\d{2}-[A-Z]{2}-\d{3}-\d{4}</p>$ ``` - **测试用例**: - 匹配:`<p>ID: C99-AB-123-4567</p>` - 不匹配:`<p>ID: C1X-YZ-00-12345</p>`(格式错误) --- ### **5. 代码示例(Python)** ```python import re text = '<p>ID: C03-SS-001-0222</p>' pattern = r'^<p>ID: C\d{2}-[A-Z]{2}-\d{3}-\d{4}</p>$' if re.match(pattern, text): print("匹配成功") else: print("匹配失败") ``` --- ### **总结** - **核心逻辑**:通过固定字符与模式符号(如 `\d`、`[A-Z]`)逐段匹配。 - **适用场景**:严格遵循 `CXX-XX-XXX-XXXX` 格式的 ID(如分类编码、序列号等)。 - **扩展性**:若格式变化(如字母长度调整),可修改对应部分的模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值