题目:写一个函数,它的原形是
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