在字符串中找出连续最长的数字串

本文介绍了一种在字符串中查找并返回最长连续数字串的方法,包括实现细节与测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!


样例输入

abcd12345ed125ss123058789

abcd12345ss54761

样例输出

输出123058789,函数返回值9
输出54761,函数返回值5
 
接口说明

函数原型:
   unsignedint Continumax(char** pOutputstr,  char* intputstr)

输入参数:
   char* intputstr  输入字符串;

输出参数:
   char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;如果输入字符串是空,也应该返回空字符串;  

返回值:

  连续最长的数字串的长度


代码:

#include <stdlib.h>
#include "oj.h"
#include <cstring>  

/* 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回
函数原型:
   unsigned int Continumax(char** pOutputstr,  char* intputstr)
输入参数:
   char* intputstr  输入字符串
输出参数:
   char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串
   pOutputstr 指向的内存应该在函数内用malloc函数申请,由调用处负责释放

返回值:
  连续最长的数字串的长度

 */
unsigned int Continumax(char** pOutputstr,  char* intputstr)
{
	char *pTemp =new char[10];
	memset(pTemp,'\0',10);
	char temp[10] = {""};
	strncpy_s(pTemp,10, temp,10);

	if (NULL == intputstr)
	{
		*pOutputstr  = pTemp;
		return 0;
	}
	size_t strLen = strlen(intputstr);
	char* pMaxNum = new char[strLen+1];
	size_t numLen = 0,maxNumLen = 0;
	size_t startNum=0;
	for(size_t i=0;i<strLen;++i)
	{
		if (intputstr[i]>='0' && intputstr[i]<='9')
		{
			startNum = i;
			numLen = 0;
			while(i<strLen && intputstr[i]>='0' && intputstr[i]<='9')
			{
				++numLen;
				++i;
			}

			if (numLen!=0 && maxNumLen<=numLen)
			{
				memset(pMaxNum,'\0',strLen+1);
				strncpy_s(pMaxNum,strLen+1, intputstr+startNum,numLen);
				maxNumLen = numLen;
			}
		}
	}

	if (maxNumLen == 0)
	{
		delete [] pMaxNum;
		pMaxNum = NULL;	
		*pOutputstr = pTemp;
	}
	else
	{
		*pOutputstr = pMaxNum;
	}

	return (unsigned int)maxNumLen;
}


测试用例:

void CExampleTest::TestCase01()
{
	char* intputstr = "abcd12345ed125ss123456789" ;
	char *pOutputstr = NULL;
 	unsigned int nLength = Continumax(&pOutputstr, intputstr);
	CPPUNIT_ASSERT(nLength == 9);
	CPPUNIT_ASSERT((pOutputstr != NULL) && (strcmp(pOutputstr,"123456789") == 0));
	free(pOutputstr);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值