C++正则表达式regex求解

坐标移动

http://www.nowcoder.com/questionTerminal/119bcca3befb405fbe58abe9c532eb29

先用 stringstream 分隔分号 ; 得到每次操作的指令字符串 t ,然后 regex_match 全文匹配 t 的第一个字符后是否全为数字,接着由 t 的第一个字符判断此次操作的移动方向来对 pair 记录的坐标(0,0)进行操作。

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    string s,t;
    while(getline(cin,s)) {
        stringstream ss(s);
        pair<int,int> p(0,0);
        while(getline(ss,t,';')) {
            if(t.empty())
                continue;
            string _ = t.substr(1);
            if(regex_match(_,regex("[0-9]*"))) {
                switch(t[0]) {
                    case 'A': p.first -= stoi(_); break; //左移
                    case 'D': p.first += stoi(_); break; //右移
                    case 'W': p.second += stoi(_); break; //上移
                    case 'S': p.second -= stoi(_); break; //下移
                    default: break; //无效
                }           
            }
        }
        cout << p.first << "," << p.second << endl;
    }
    return 0;
}
全部评论
怎么有这么多函数啊,哭了
4 回复 分享
发布于 2021-08-19 16:32
regex_match(_,regex("[0-9]*") 需要更正为 regex_match(_,regex("[0-9]+") 理由:[0-9]+ 表示必须出现一次数字, 而不是[0-9]* 不出现也可以,否则 string _ 会出现为空的情况,导致 stoi(_) 出错
3 回复 分享
发布于 2022-04-27 08:34
请问如果遇到`A;`这样的样例怎么办呢?会出现stoi()对空字符串转换的情况呀,这个要怎么处理?应该判断下`_`不为空且匹配成功才往下进行吧。`if( _ != "" && regex_match(_,regex("[0-9]*")) )`
1 回复 分享
发布于 2023-10-10 23:13 广东
花里胡哨
点赞 回复 分享
发布于 2022-09-02 17:50 山东
写的可以,一目了然。
点赞 回复 分享
发布于 2022-06-10 23:10
太清晰了!赞
点赞 回复 分享
发布于 2022-04-09 14:49
大佬的代码好优雅,学习了
点赞 回复 分享
发布于 2022-02-26 21:34
牛逼
点赞 回复 分享
发布于 2021-09-22 21:14
清晰
点赞 回复 分享
发布于 2021-08-05 08:04

相关推荐

故事和酒66:央企,事少钱少稳定福利好,离家近可以考虑
点赞 评论 收藏
分享
评论
55
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务