【华为OJ】【在字符串中找出连续最长的数字串】

题目描述

请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;

注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!

样例输入

abcd12345ed125ss123058789

abcd12345ss54761

样例输出

输出123058789,函数返回值9

输出54761,函数返回值5

接口说明

函数原型:

   unsignedint Continumax(char** pOutputstr,  char* intputstr)

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

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

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

本题考查知识点:字符串、指针的指针

本题难度:简单

#include 
#include 
#include "oj.h"


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

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

 */
unsigned int Continumax(char** pOutputstr,  char* intputstr)
{
	int len = strlen(intputstr);
	int num=0,flag = 0,max = 0;//判断是否是数字
	int currIndex = 0;
	//char * poutputstr = (char *)malloc(len*sizeof(char));
	for(int i = 0;i='0'&&intputstr[i]<='9')
		{
			num =0;
			flag = 1;
			currIndex = i;
			while (intputstr[i] != '\0' && (intputstr[i] >= '0' && intputstr[i] <= '9'))
			{
				i++;
				num++;
			}
	
			if(num>max)
			{
				max = num;
				(*pOutputstr) = (char*)malloc(max+1);
				memcpy(*pOutputstr,intputstr+currIndex,max);
				(*pOutputstr)[max] = '\0';
				
			}
			
		}
	}
	if(flag = 0)
	{
		*pOutputstr = "";
	}
	
	return max;
}

get的知识点:

1.*运算符的结合性是从右到左,因此“char *(*p)”可以写成char **p

char **p;

char *name[] = {"BASIC","FORTRAN","C++","Pascal","COBOL"};

p = name + 2;

*p代表name[2],它指向字符串“C++”,或者说在name[2]中存放了字符串"C++"第一个字符的地址

**p是*p(值为name[2])指向的“C++”第一个字符元素的内容,即字符"C"

你可能感兴趣的:(华为机试108题)