牛客网 NC205084 牛牛爱字符串#
目录#
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#
数据保证,字符串可能含有空格。
1.9. Source#
2. 解读#
从字符串中提取数字,并去除先导0,需要注意这里不能用while(cin>>str)
,因为会跳过输入字符串中的空格。
单独被分隔的一个0,如e0e
,也需要输出,连续多个0的组合,如000
,则输出最后一个0。
3. 代码#
#include<iostream>
#include<cstring>
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<<str[i];
}
}else{
// 全0
if(flag == 1)cout<<0;
// 数字后的第一个字符,输出空格
if(flag != 0)cout<<" ";
// 恢复状态
flag = 0;
}
}
// 换行
cout<<endl;
}
}
联系邮箱:curren_wong@163.com
CSDN:https://me.csdn.net/qq_41729780
知乎:https://zhuanlan.zhihu.com/c_1225417532351741952
公众号:复杂网络与机器学习
欢迎关注/转载,有问题欢迎通过邮箱交流。