欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【牛客网】字符串中找出连续最长的数字串

程序员文章站 2024-02-21 14:15:15
...

【牛客网】字符串中找出连续最长的数字串

本题链接
题目描述
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:

个测试输入包含1个测试用例,一个字符串str,长度不超过255。

输出描述:

在一行内输出str中里连续最长的数字串。

示例1
输入

abcd12345ed125ss123456789

输出

123456789

【解题思路】
此题是一道比较典型的找子串问题,题意不难,但是易错。我们需要先用一个字符串保存输入字符串中数字串,在用一个字符串保存数字串中最长的串
代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str;//输入字符串
    string cur;//保存数字串
    string ret;//保存最长数字串
    cin>>str;
    for(int i = 0;i<=str.size();i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            cur+=str[i];
        }
        else{
            if(ret.size()<cur.size())
            {
                ret = cur;
            }
            else{
                cur.clear();//清空cur,放入新的字符串
            }
        }
    }
    cout<<ret<<endl;
    return 0;
}

易错点:
此题虽然简单,但是很容易错,且错的一脸懵逼(说的就是我,哈哈)
1.for(int i = 0;i<=str.size();i++)这个等号是不是很碍眼,代码写习惯了,我们进行遍历时,是不加等号的。但并不是所有的循环都如此,比如此题。
【牛客网】字符串中找出连续最长的数字串
【牛客网】字符串中找出连续最长的数字串
当末尾是长数字串时,代码出现问题,为什么?经过调试我才发现,循环最后一次进去,遍历的是字符串的最后一个字符,cur返回的是123456789但循环经过if直接跳出了,这个值并没有给到ret,所以返回错误。加等号的原因就在这,循环再进入一次,将cur附给ret,则返回正确。
2.
【牛客网】字符串中找出连续最长的数字串
将最长数字串给ret时,这样判断是正确的,但是ret.size()<=cur.size()还对吗?不对,因为我这样写就错了,哈哈哈。
错误截图:
【牛客网】字符串中找出连续最长的数字串
原因:比如这个测试用例abcd12345ed125ss123456789循环第一次进入,ret附成12345,但在经过字符时,正确做法,是清空cur,若加上“=”则无法进入到函数cur.clear()中导致一直无法置空,将所有的数字都赋给了ret,产生错误。

相关标签: 每日一题