题目来自网络和师兄口述提供,转载请注明出处,谢谢!
1.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
1 #include"stdafx.h" 2 #include<iostream> 3 using namespace std; 4 5 #define MAX 100 6 7 void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) 8 { 9 int i; 10 int j=0; 11 int site=0; 12 for(i=0;i<lInputLen;i++) 13 { 14 if(pInputStr[i]!=pInputStr[i+1]) 15 { 16 if(i==site) 17 { 18 pOutputStr[j]=pInputStr[i]; 19 j++; 20 site=i+1; 21 } 22 else 23 { 24 int num=i-site+1; 25 char ch[MAX]; 26 memset(ch,0,sizeof(ch)); 27 itoa(num,ch,10); 28 strcpy(pOutputStr+j,ch); 29 j+=strlen(ch); 30 pOutputStr[j]=pInputStr[i]; 31 j++; 32 site=i+1; 33 } 34 } 35 } 36 } 37 38 int main() 39 { 40 char p[MAX]={0}; 41 while(cin>>p) 42 { 43 char q[MAX]={0}; 44 stringZip(p,strlen(p),q); 45 cout<<q<<endl; 46 } 47 return 0; 48 }
此方法时间复杂度仅为O(n),只需遍历一次数组。
有一个问题,若重复字符达到10+,怎么输出?题目没说明,所以代码中也没有考虑这个问题。(已解决,10.02 update)
2.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。
要求实现函数: void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“4 + 7” 输出:“11”
输入:“4 - 7” 输出:“-3”
输入:“9 ++ 7” 输出:“0” 注:格式错误
1 #include"stdafx.h" 2 #include<iostream> 3 #include<string> 4 using namespace std; 5 6 #define MAX 100 7 8 void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) 9 { 10 int num1,num2,sum; 11 char *ch1=new char[lInputLen+1]; 12 char ch2; 13 char *ch3=new char[lInputLen+1]; 14 bool flag=true; 15 int i=0; 16 int j=0; 17 while(pInputStr[i]!=' ') 18 { 19 ch1[i]=pInputStr[i]; 20 i++; 21 } 22 ch1[i]='