/**********************************
<p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。</span></p><p>要求实现函数:<span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;</span></p>
**********************************/
#include<iostream>
using namespace std;
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
try
{
if(lInputLen<=0)throw 0;
int i=1,count=0;
pOutputStr[count]=pInputStr[0];
int k=0;
bool flag=false;
while(i<lInputLen)
{
flag=false;
for(k=0;k<=count;k++)
{
if(pOutputStr[k]==pInputStr[i])
{
flag=true;
break;
}
}
if(!flag)
{
count++;
pOutputStr[count]=pInputStr[i];
}else flag=false;
i++;
}
count++;
pOutputStr[count]='\0';
}catch(int e){
if(e==0)
{
cout<<"正确的字符串的长度大于0!"<<endl;
}
exit(0);
}
}
int main()
{
//char *pInputStr="aaaaaaaaaa";
char *pInputStr="afafafafa";
char *pOutputStr;
int lInputLen=strlen(pInputStr);
pOutputStr=new char[lInputLen+1];
stringFilter(pInputStr,lInputLen,pOutputStr);
cout<<pInputStr<<endl;
cout<<pOutputStr<<endl;
if(pOutputStr!=NULL)delete []pOutputStr;
return 0;
}
/**********************************
<p><span style="font-size: 14px; font-family: Verdana;"></span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;</span></p><p><span style="font-size: 14px; font-family: Verdana;"></span></p>
**********************************/
#include<iostream>
using namespace std;
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
try
{
if(lInputLen<=0)throw 0;
int i=1,count=0;
pOutputStr[count]=pInputStr[0];
int k=1;
//情况1:只有一个字符组成的字符串;
if(1==lInputLen)
{
char ch=pOutputStr[count];
pOutputStr[count]=1+'0';
pOutputStr[count+1]=ch;
count+=1;
}
while(i<lInputLen)
{
if(pOutputStr[count]==pInputStr[i])
{
k++;
}else{
//情况2:有多个连续字符组成的情况;
if(k>1)
{
char ch=pOutputStr[count];
pOutputStr[count]=k+'0';
pOutputStr[count+1]=ch;
pOutputStr[count+2]=pInputStr[i];
count+=2;
}else{
pOutputStr[count+1]=pInputStr[i];
count+=1;
}
k=1;
}
//情况3:全部是一样的字符组成的字符串或者最后是以多个连续相同字符结尾组成的字符串;
if(i==lInputLen-1)
{
if(k>1)
{
char ch=pOutputStr[count];
pOutputStr[count]=k+'0';
pOutputStr[count+1]=ch;
count+=1;
}
}
i++;
}
count++;
pOutputStr[count]='\0';
}catch(int e){
if(e==0)
{
cout<<"正确的字符串的长度大于0!"<<endl;
}
exit(0);
}
}
int main()
{
//char *pInputStr="a";
//char *pInputStr="afafafafa";
//char *pInputStr="afafaaaaa";
char *pInputStr="cccddecc";
char *pOutputStr;
int lInputLen=strlen(pInputStr);
pOutputStr=new char[lInputLen*2+1];
stringZip(pInputStr,lInputLen,pOutputStr);
cout<<pInputStr<<endl;
cout<<pOutputStr<<endl;
if(pOutputStr!=NULL)delete []pOutputStr;
return 0;
}
/**********************************
<p></p><p><span style="font-size: 14px; font-family: Verdana;"></span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">要求实现函数:
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;</span><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana"> </span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">示例
输入:“4 + 7” 输出:“11”
输入:“4 - 7” 输出:“-3”
输入:“9 ++ 7” 输出:“0” 注:格式错误
</span></p><p><span style="font-size: 14px; font-family: Verdana;"></span></p><p></p>
**********************************/
#include<iostream>
#include<math.h>
using namespace std;
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
{
int i=0;
int value=0;
int num_value=0;
int flag=-1;//-1开始,0加号,1减号;
bool flag_exit=false;
while(i<lInputLen)
{
switch(pInputStr[i])
{
case '+':
{
if(num_value==0)
{
cout<<"输入错误! ";
flag_exit=true;
}else{
int k;
int temp=0;
for(k=0;k<num_value-1;k++)
{
int m_value=pInputStr[i-num_value+k]-'0';
temp=(temp+m_value)*10;
}
temp+=pInputStr[i-1]-'0';
if(flag==-1 || flag==0) value+=temp;
if(flag==1)value-=temp;
flag=0;
num_value=0;
}
break;
}
case '-':
{
if(num_value==0)
{
cout<<"输入错误! ";
flag_exit=true;
}else{
int k=0;
int temp=0;
for(k=0;k<num_value-1;k++)
{
int m_value=pInputStr[i-num_value+k]-'0';
temp=(temp+m_value)*10;
}
temp+=pInputStr[i-1]-'0';
if(flag==-1 || flag==0) value+=temp;
if(flag==1)value-=temp;
flag=1;
num_value=0;
}
break;
}
default:
{
num_value++;
break;
}
}
if(flag_exit)break;
if(i==lInputLen-1 )
{
if(num_value>0)
{
int k=0;
int temp=0;
for(k=0;k<num_value-1;k++)
{
int m_value=pInputStr[i-1+k]-'0';
temp=(temp+m_value)*10;
}
temp+=pInputStr[i]-'0';
if(flag==-1 || flag==0) value+=temp;
if(flag==1)value-=temp;
}else{
cout<<"输入错误! ";
flag_exit=true;
}
}
i++;
}
if(flag_exit)
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
}else{
//将value-》0-9之间的数值;
//cout<<value<<endl;
int count=0;
int j;
if(value<0)
{
pOutputStr[count]='-';
count++;
j=1;
value=abs(value);
while(value!=0)
{
pOutputStr[count]=value%10+'0';
value/=10;
count++;
}
for(j=0;j<count/2;j++)
{
char ch=pOutputStr[j+1];
pOutputStr[j+1]=pOutputStr[count-1-j];
pOutputStr[count-1-j]=ch;
}
pOutputStr[count]='\0';
}else{
while(value!=0)
{
pOutputStr[count]=value%10+'0';
value/=10;
count++;
}
for(j=0;j<count/2;j++)
{
char ch=pOutputStr[j];
pOutputStr[j]=pOutputStr[count-1-j];
pOutputStr[count-1-j]=ch;
}
pOutputStr[count]='\0';
}
}
}
int main()
{
//char *pInputStr="9+-7";
//char *pInputStr="-9+7";
//char *pInputStr="+9+7";
//char *pInputStr="9++7";
//char *pInputStr="9+7+";
char *pInputStr="9-17-8";
int lInputLen=strlen(pInputStr);
char *pOutputStr=new char[lInputLen+1];
cout<<pInputStr<<" = ";
arithmetic(pInputStr,lInputLen,pOutputStr);
cout<<pOutputStr<<endl;
return 0;
}