题目描述(40分):

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".

2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"

要求实现函数: 

voidstringZip(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr:  输入字符串

        lInputLen:  输入字符串长度         

【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例 

输入:“cccddecc”  输出:“3c2de2c”

输入:“adef”    输出:“adef”

输入:“pppppppp” 输出:“8p”

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
	char input[100];
	int len[100];
	char output[100];
	int i=0,j=0,k=0;
	cin>>input;
	while(input[i]!='\0')
	{
		output[j]=input[i++];
		len[k]=1;
		while(output[j]==input[i])
		{
			len[k]++;
			i++;
		}
		k++;
		j++;
	}
	output[j]='\0';
	for(i=0;i<strlen(output);i++)
		if(len[i]!=1)
			printf("%d%c",len[i],output[i]);
		else
			printf("%c",output[i]);
}

2.加减运算 

通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。

输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

补充说明:

1. 操作数为正整数,不需要考虑计算结果溢出的情况。

2. 若输入算式格式错误,输出结果为“0”。

要求实现函数: 

voidarithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr:  输入字符串

        lInputLen:  输入字符串长度        

【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例 

输入:“4 + 7” 输出:“11”

输入:“4 - 7” 输出:“-3”

输入:“9 ++ 7” 输出:“0” 注:格式错误

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
	char input[20],output[20];
	int i=0,j=0,flag;
	gets(input);
	int a=0,b=0;
	while(input[i]!='\0')
	{
		while(input[i]<='9'&&input[i]>='0') 
		{
			a=a*10+input[i++]-'0';
		}
		i++;
		if(input[i]=='+')	flag=1;
		if(input[i]=='-')	flag=0;
		if(input[i]!='-'&&input[i]!='+')	flag=-1;
		i=i+2;
		while(input[i]<='9'&&input[i]>='0') 
		{
			b=b*10+input[i++]-'0';
		}
	}
	if(flag==-1)	a=0;
	if(flag==1)	a=a+b;
	if(flag==0)	a=a-b;
	printf("%d",a);
}

3.最大递增子序列

#include<stdio.h>

int max_sub2(int a[], int size);
void main()
{
	int a[]={-2,11,-4,-3,-5,2,-5,13,12,-9};
	int m=max_sub2(a,9);
	printf("%d",m);
} 
int max_sub2(int a[], int size)
{
          int i,max=0,temp_sum=0;
          for(i=0;i<size;i++)
          {
               temp_sum+=a[i];
               if(temp_sum>max)
                    max=temp_sum;
               else if(temp_sum<0)
                    temp_sum=0;
          }
          return max;
}