zoukankan      html  css  js  c++  java
  • ZT 查找字符串中连续最长的数字串

    查找字符串中连续最长的数字串

    有俩方法,1)比较好理解一些。2)晦涩

    1)

    /*
    功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,
    并把这个最长数字串付给其中一个函数参数outputstr所指内存。
    例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,
    函数将返回9,outputstr所指的值为123456789
    */
    #include <stdio.h>
    int Findmaxlen(char *input,char *output);
    void main()
    {
    	char input[]="abc123def123456ee123456789dd";
    	char output[50]={0};
    	int maxlen;
    	maxlen=Findmaxlen(input,output);
    	printf("the str %s
    ",output);
    	printf("the maxlen is %d 
    ",maxlen);
    }
    int Findmaxlen(char *input,char *output)
    {
    	char *in=input,*out=output,*temp,*final;
    	int count=0,maxlen=0,i;
    
    	while(*in!='')
    	{
    		if(*in>='0'&&*in<='9')
    		{
    		   count=0;
    		   for(temp=in;*in>='0'&&*in<='9';in++)
    				count++;
    
    		   if(maxlen<count)
    		   {
    				maxlen=count;
    				final=temp;  
    		   }//if
    		}//if
    		in++;
    	}//while
    
    	for(i=0;i<maxlen;i++)
    	{
    	*out++=*final++;
    	}
    
    	*out='';
    	return maxlen;
    }
    

     linux:/work/ctest/interview$ ./1
    the str 123456789
    the maxlen is 9

    2)

    题目:写一个函数,它的原型是如下,在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指的内存。

    int continuemax(char *outputstr, char *inputstr)

    举例:intputstr被赋予"abcd12345ed125ss123456789",函数将返回9,outputstr所指的值为"123456789"。

    答:

    复制代码
    #include "stdafx.h"
    #include <iostream>
    
    using namespace std;
    
    //查找字符串中连续最长的数字串
    int continuemax(char *outputstr, char *inputstr)
    {
        int maxLen = 0;
        char *pStart;
        char *maxStr;
        bool begin = true;
        int count = 0;
        while (*inputstr != '')
        {
            if (begin && isdigit(*inputstr))
            {
                pStart = inputstr;
                count++;
                begin = false;
            }
            else if (isdigit(*inputstr))
            {
                count++;
            }
            else
            {
                if (count > maxLen)
                {
                    maxStr = pStart;
                    maxLen = count;
                }
                count = 0;
                begin = true;
            }
            inputstr++;
            if (*inputstr == '' && count > maxLen)
            {
                maxStr = pStart;
                maxLen = count;
            }
        }
        *(maxStr + maxLen) = '';
        while(*maxStr != '')
        {
            *outputstr++ = *maxStr++;
        }
        *outputstr = '';
        return maxLen;
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        char inputstr[] = "abcd12345ed125ss123456789";
        char *outputstr = new char[strlen(inputstr) + 1];
        memset(outputstr, 0, strlen(inputstr) + 1);
        cout<<continuemax(outputstr, inputstr)<<"  "<<outputstr<<endl;
        delete [] outputstr;
        return 0;
    }
    复制代码

    运行界面如下:

    分类: 算法面试
  • 相关阅读:
    百度地图Api 根据两个坐标点计算距离
    Android 6.0 Permission权限与安全机制
    CentOS安装nginx
    CentOS安装mysq
    CentOS安装JDK
    -bash: /root/java/jdk/bin/java: cannot execute binary file
    数据库连接池之_DButils
    数据库连接池之_c3p0
    数据库连接池之_Druid简单使用
    后台管理平台编辑表格
  • 原文地址:https://www.cnblogs.com/jeanschen/p/3550570.html
Copyright © 2011-2022 走看看