博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 600A Extract Numbers
阅读量:6330 次
发布时间:2019-06-22

本文共 1602 字,大约阅读时间需要 5 分钟。

模拟题,意思是一个字符串,单词直接用','或';'来分割,可以为空,把不含前导0的整数和其他单词分别放入A和B。按照一定格式输出。

没有用stl的习惯。维护两个下标i,j,表示开区间(i,j),两段补上分割符号。每个单词后面都加上一个',',输出的时候在处理掉。

用最后的','判断A和B是不是空。

#include
using namespace std;typedef long long ll;const int LEN = 1e5+5;char s[LEN];char a[LEN];char b[LEN];bool is_sp(char c){ return c == ';' || c == ','; }void solve(){ int n = strlen(s); s[n] = ';'; int i = -1, j = 0, p = 0, q = 0; bool has_alp = false; for(; j <= n; j++){ if(is_sp(s[j])){ if(j > i+1){ if(has_alp){ memcpy(b+q,s+i+1, j-i-1); q += j-i-1; b[q++] = ','; } else { if(j-i-1 > 1 && s[i+1] == '0'){ memcpy(b+q,s+i+1, j-i-1); q += j-i-1; b[q++] = ','; } else { memcpy(a+p,s+i+1, j-i-1); p += j-i-1; a[p++] = ','; } } } else b[q++] = ','; i = j; has_alp = false; } else { if(!has_alp && (isalpha(s[j]) || s[j] == '.')) has_alp = true; } } bool f2 = q; if(p){ a[--p] = 0; } if(f2){ b[--q] = 0; } // empty if(p) printf("\"%s\"\n",a); else puts("-"); if(f2) printf("\"%s\"\n",b); else puts("-");}//#define LOCALint main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif gets(s); solve(); return 0;}

 

转载于:https://www.cnblogs.com/jerryRey/p/5003625.html

你可能感兴趣的文章
SVN的使用
查看>>
MySQL分区
查看>>
开源 java CMS - FreeCMS2.8 自定义标签 siteOne
查看>>
jstl 保留两位小数、js String 转float 保留两位小数
查看>>
【leetCode】134. Gas Station-----Java
查看>>
使用websocket的组件socket.io实现最简单的聊天室功能。
查看>>
vim的一些命令
查看>>
 企业所面临的问题与挑战
查看>>
iOS开发性能优化的25个tips
查看>>
时空查询里分线查询
查看>>
初探莫比乌斯反演及欧拉反演
查看>>
python 中的三元运算符
查看>>
我的友情链接
查看>>
[INS-20802] Oracle Net Configuration Assistant failed,及怎么安装oracle 补丁
查看>>
WMS仓储管理系统哪个好?WMS仓储管理系统有什么用
查看>>
CentOS64位用John破解简单密码,No password hashes loaded
查看>>
JAVA数据类型转换
查看>>
smarty实例教程-模板设计篇-2
查看>>
Dubbo入门实例
查看>>
Memcache知识点梳理
查看>>