改写要求:1:以指针为数据结构开辟存储空间
改写要求2:被插入字符串和插入字符串不等长,设计程序间隔插入 如被插入字符串长度为12,待插入字符串长度为5 则插入间隔为2
改写要求3:添加函数InsertInOrder() 先将被插入字符串中的字母按照ASCII表顺序排序 再将插入字符串插入并保证原来的字母顺序
#include <cstdlib>
#include <iostream>#include <cstring>using namespace std;
class STRING{ char *str1; char *str2; public: STRING(char* s1,char* s2) { str1=new char[strlen(s1)]; str2=new char[strlen(s2)]; strcpy(str1,s1); strcpy(str2,s2); } void InsertInOrder(); void process(); void print() { cout<<str1<<endl; }};void STRING::process()
{ int len1,len2,count=1; char str[80]; int i,j=0,k=0; len1=strlen(str1); len2=strlen(str2); int n=len2/len1; for(i=0;i<len1+len2;i++) { if(count%(n+1)==0) { str[i]=str1[j++]; count++; }else{ str[i]=str2[k++]; count++; }}
str[i]='\0'; cout<<str<<endl; strcpy(str1,str);}void STRING::InsertInOrder()
{ char temp; int i,j,k; int len1=strlen(str1); int len2=strlen(str2); for(i=0;i<len2-1;i++) { k=i; for(j=i+1;j<len2;j++) if(str2[k]<str2[j]) { k=j; temp=str2[i]; str2[i]=str2[k]; str2[k]=temp; } } cout<<str2<<endl; for(i=0;i<len1;i++) { for(j=len2-1+i;j>=0;j--) { if(str1[i]>str2[j]) str2[j+1]=str2[j]; else break; } str2[j+1]=str1[i]; } cout<<str2<<endl;}int main(int argc, char *argv[])
{ STRING test("abcd","ABCDEFG");//这里第一个参数是插入字符串 第二个是被插入字符串 测试要保证第二个参数比第一个长 因为程序没有写对短的情形的处理 // test.InsertInOrder(); test.process(); test.print(); system("PAUSE"); return EXIT_SUCCESS;}改写要求2和3要分开运行即注释掉改写InsertInOrder()来测试改写要求2 否则会出现错误 这是由于这里是直接在str1和str2上修改