C++ //练习 17.23 编写查找邮政编码的正则表达式。一个美国邮政编码可以由五位或九位数字组成。前五位数字和后四位数字之间可以用一个短横线分隔。

C++ Primer(第5版) 练习 17.23

练习 17.23 编写查找邮政编码的正则表达式。一个美国邮政编码可以由五位或九位数字组成。前五位数字和后四位数字之间可以用一个短横线分隔。

环境:Linux Ubuntu(云服务器)
工具:vim
代码块:
cpp 复制代码
/*************************************************************************
	> File Name: ex17.23.cpp
	> Author: 
	> Mail: 
	> Created Time: Sun 18 Aug 2024 10:11:23 AM CST
 ************************************************************************/

#include<iostream>
#include<regex>
#include<string>
using namespace std;

bool valid(const smatch &m){
    if(m[1].matched){
        return m[3].matched && (m[4].matched == 0 || m[4].str() == " ");
    }
    else{
        return !m[3].matched && m[4].str() == m[6].str();
    }
}

int main(){
    string postcode = "(\\d{5})([-])?(\\d{4})?";
    regex r(postcode);
    smatch m;
    string s;
    while(getline(cin, s)){
        for(sregex_iterator it(s.begin(), s.end(), r), end_it; it != end_it; ++it){
            if(valid(*it)){
                cout<<"valid: "<<it->str()<<endl;
            }
            else{
                cout<<"not valid: "<<it->str()<<endl;
            }
        }
    }

    return 0;
}
运行结果显示如下:
相关推荐
linx2952 分钟前
阶段三讲义:类型与对象(Classes & Essential Operations)
c++
飞鸟真人2 分钟前
C++ lambda 捕获完整梳理
c++·闭包·lamda
東隅已逝,桑榆非晚10 分钟前
c++内存管理
c++·笔记
matlab代码12 分钟前
基于matlab PCA人脸识别系统【源码63期】
开发语言·matlab
Terra.K12 分钟前
后端开发阶段性总结
java·开发语言·后端
学逆向的15 分钟前
PE——合并节
开发语言·网络安全·pe
刘广睿16 分钟前
素材去重为什么难?文件指纹、感知哈希与相似度判定的设计笔记
算法·哈希算法·产品设计·素材管理
是个西兰花18 分钟前
C++11:线程库与线程安全问题
开发语言·c++
点心的游戏开发世界20 分钟前
GDScript 入门笔记(十三):字符串操作
开发语言·笔记·游戏引擎·godot
少司府29 分钟前
C++进阶:智能指针
开发语言·数据结构·c++·b树·算法·c·智能指针