C语言练习题-字符串中找连续最长字符串

题目:写一个函数,它的原形是

int continumax(char *outputstr,char *intputstr);

功能:在字符串中找出连续最长的字符串,并把这个串的长度返回,并把这个最长数字串付给其中的一个函数参数outputstr所指内存。例如"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789;

解答:

/*
在字符串中找到连续最长的字符串,并把这个串的长度返回,并把这个数字串传给其中一个函数outputstr所指内存
*/

#include
#include

int continumax(char *outputstr,char *intputstr)
{
	char *start1 = intputstr;   //start1记录最长数字串的首地址
	char *start2 = NULL;        //start2是个中间变量,记录当前数字串的首地址
	char *p = intputstr;        
	int maxnum = 0;             //记录最长数字串的字符数
	int num;                    //中间变量,记录当前数字串的长度
	int i;

	while(*p != '\0')
	{
		num = 0;
		if( (*p >= '0') && (*p <= '9') )
		{
			start2 = p;     //记录当前数字串的起点
			num++;
			p++;
			while( (*p != '\0') && (*p >= '0') && (*p <= '9') )
			{
				num++;
				p++;
			}
			if(num > maxnum)
			{
				maxnum = num;
				start1 = start2;    //把当前数字串的首地址赋给start1
			}
		}
		else
		{
			p++;
		}
	}
	for( i = 0;i < maxnum;i++)  //将最长数字串值赋给outputstr
	{
		*(outputstr + i) = *(start1 + i);
	}
	*(outputstr + i) = '\0';    //注意:字符串结尾为'\0'
	return maxnum;
}

int main()
{
	char *outputstr = (char *)malloc(100 * sizeof(char));
//	char outputstr[100];
	char *intputstr = "abcd12345ed125ss123456789";
	int num;
	num = continumax(outputstr,intputstr);
	printf("maxnum = %d\n",num);
	printf("maxstr = %s\n",outputstr);
	return 0;
}#include
#include
#include
#include
#include
#include
#include

#define FIFO1      "in1"
#define FIFO2	   "in2"
#define MAX_BUFFER_SIZE     1024  //缓冲区大小
#define IN_FILES	3  //多路复用输入文件数目
#define TIME_DELAY  60   //超时值秒数
#define MAX(a,b)    ((a>b)?(a):(b)) 

int main(void)
{
	int fds[IN_FILES];  //管道描述符
	char buf[MAX_BUFFER_SIZE]; 
	int i,res,real_read,maxfd;
	struct timeval tv; 
	fd_set  inset,tmp_inset;//文件描述符集

	fds[0]=0;  //终端的文件描述符
	/*创建两个有名管道*/
	if(access(FIFO1,F_OK)==-1)
	{
		if((mkfifo(FIFO1,0666)<0)&&(errno!=EEXIST))
		{
			printf("Cannot create fifo1 file\n");
			exit(1);
		}
	}

	if(access(FIFO2,F_OK)==-1)
	{
		if((mkfifo(FIFO2,0666)<0)&&(errno!=EEXIST))
		{
			printf("Cannot create fifo2 file\n");
			exit(1);
		}
	}

	/*以只读非阻塞方式打开两个管道文件*/
	if((fds[1]=open(FIFO1,O_RDONLY|O_NONBLOCK))<0)
	{
		printf("Open in1 error\n");
		return 1;
	}

	if((fds[2]=open(FIFO2,O_RDONLY|O_NONBLOCK))<0)
	{
		printf("Open in2 error\n");
		return 1;
	}

	/*取出两个文件描述符中的较大者*/
	maxfd=MAX(MAX(fds[0],fds[1]),fds[2]);

	/*初始化读集inset,并在读文件描述符集中加入相应的描述集*/
	FD_ZERO(&inset);  /*将inset清零,使集合中不含任何fd*/
	for(i=0;i




你可能感兴趣的:(C语言)