文章目录
- 1. 题目描述
- 1.1. Time Limit
- 1.2. Memory Limit
- 1.3. Problem Description
- 1.4. Input
- 1.5. Output
- 1.6. Sample Input
- 1.7. Sample Output
- 1.8. Note
- 1.9. Source
- 2. 解读
- 3. 代码
1. 题目描述 1.1. Time Limit
C/C++ 1秒,其他语言2秒
1.2. Memory Limit
C/C++ 262144K,其他语言524288K
1.3. Problem Description
牛牛在玩字符串。牛牛得到了一个字符串(可能含有空格),他希望在这些字符串中提取出数字。例如:
a1b23c456d007890
中可以提取出1, 23, 456, 7890
共4个数字。现在,他得到了一个长度高达1000的字符串,请你帮他提取出所有的数字。1.4. Input
本题有多组数据。输入一个字符串S。
1.5. Output
输出提取出的所有数字,相邻两个数字用一个空格隔开。不包含数字的时候输出空行注意,你输出的数不能含有前导0。
1.6. Sample Input
u1s1qs
1a2b3c4d5e006d
a1b23c456d007890
2333
kur1su
alan0233
1.7. Sample Output
1 1
1 2 3 4 5 6
1 23 456 7890
2333
1
233
1.8. Note
数据保证 ∑ l e n g t h ( S ) ≤ 100000 \sum length(S)\le 100000 ∑length(S)≤100000,字符串可能含有空格。
1.9. Source
牛客网 NC205084 牛牛爱字符串
2. 解读 从字符串中提取数字,并去除先导0,需要注意这里不能用
while(cin>>str)
,因为会跳过输入字符串中的空格。单独被分隔的一个0,如
e0e
,也需要输出,连续多个0的组合,如000
,则输出最后一个0。3. 代码
#include
#include
using namespace std;
int main(){
string str;
int flag;
while(getline(cin,str)){
flag = 0;
for(size_t i = 0;
i < str.size();
i++){
// 为数字
if(str[i] >= '0' && str[i] <= '9'){
// 为0,且不为最后一位,前面也没有非0数字
if(str[i] == '0' && flag !=2 && i != str.size() - 1 ){
// 先导0
flag = 1;
}else{
// 数字
flag = 2;
cout<[i];
}
}else{
// 全0
if(flag == 1)cout<<0;
// 数字后的第一个字符,输出空格
if(flag != 0)cout<<" ";
// 恢复状态
flag = 0;
}
}
// 换行
cout<
联系邮箱:curren_wong@163.com
CSDN:https://me.csdn.net/qq_41729780
知乎:https://zhuanlan.zhihu.com/c_1225417532351741952
公众号:复杂网络与机器学习
欢迎关注/转载,有问题欢迎通过邮箱交流。
【算法刷题笔记|牛客网 NC205084 牛牛爱字符串】
文章图片
推荐阅读
- 数据结构和算法|LeetCode 的正确使用方式
- #|7.分布式事务管理
- 每日一题|每日一题-解码(第十一届蓝桥杯)(简单思维)
- #|算法设计与分析(Java实现)——贪心算法(集合覆盖案例)
- #|算法设计与分析(Java实现)—— 动态规划 (0-1 背包问题)
- #|阿尔法点亮LED灯(一)汇编语言
- #|Multimedia
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- 基础课|使用深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索算法求解 (n^2 -1) 数码难题,耗时与内存占用(时空复杂度)对比(附((n^2 - 1) 数码问题控
- #|学习笔记 | Ch05 Pandas数据清洗 —— 缺失值、重复值、异常值