求出字符串中最长的数字串的长度

问题1

  • 求出字符串中的最长连续数字串的长度
  • 代码

    #include <iostream>
    #include <vector>
    #include <math.h>
    #include <random>
    #include <limits>
    #include <string>
    using namespace std;
    
    int main()
    {
        string str;
    
        cin >> str;
    
        int index = 0;
        int max_len = 0;
        int curr_len = 0;
        int max_start = 0;
        int curr_start = 0;
        while ( index < str.size() )
        {
            if (str[index] >= '0' && str[index] <= '9')
            {
                curr_start = index;
                index++;
                curr_len = 1;
                while (index < str.size() && str[index] >= '0' && str[index] <= '9')
                {
                    index++;
                    curr_len++;
                }
                if (max_len < curr_len)
                {
                    max_start = curr_start;
                    max_len = curr_len;
                }
            }
            else
                index++;
        }
        cout << "max len : " << max_len << endl;
        cout << "max start : " << max_start << endl;
    
        system("pause");
        return 0;
    }
    

问题2

  • 描述:数字串之间允许最多有一个非数字的字符,计算此时求得的最长数字串。(比如说1234a12的结果是7)。
  • 代码

    #include <iostream>
    #include <vector>
    #include <math.h>
    #include <random>
    #include <limits>
    #include <string>
    #include <math.h>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        string str;
    
        cin >> str;
    
        int non_digit_len = 0;
    
        int index = 0;
        int curr_len = 0;
        int max_start = 0;
        int max_len = 0;
        int last_len = -1;
        while ( index < str.size() )
        {
            if (str[index] >= '0' && str[index] <= '9')
            {
                while (index < str.size() && str[index] >= '0' && str[index] <= '9')
                {
                    index++;
                    curr_len++;
                }
                if (max_len < curr_len + last_len + 1)
                {
                    max_len = curr_len;
                }
            }
            else
            {
                while (index < str.size() && !(str[index] >= '0' && str[index] <= '9'))
                {
                    index++;
                    non_digit_len++;
                }
                if (non_digit_len == 1)
                {
                    last_len = curr_len;
                    curr_len = 0;
                }
                else
                {
                    last_len = -1;
                    curr_len = 0;
                }
                non_digit_len = 0;
            }
            max_len = std::max(max_len, curr_len + last_len + 1);
        }
    
        cout << "max len : " << max_len << endl;
    
        system("pause");
        return 0;
    }
    

猜你喜欢

转载自blog.csdn.net/u012526003/article/details/81358529