算法刷题笔记|牛客网 NC205084 牛牛爱字符串


文章目录

    • 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 牛牛爱字符串】算法刷题笔记|牛客网 NC205084 牛牛爱字符串
文章图片

    推荐阅读