c++编程出现乱码。建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。

若输入“abcde”再输入“ABCDEFG”则会出错(前面的字符串不能比后面短,否则就会出错)。

题:建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。例如将字符串“abcde” 交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。
具体要求如下:
(1)私有数据成员
char str1[60] :存放被插入的字符串。
char str2[40] :存放待插入的字符串。
char str3[100] :存放插入后的字符串。
(2)公有成员函数
STRING (char *s1, char *s2 ):构造函数,用s1和s2初始化str1和str2。
void process():将str2中的字符串插入到str1中,存放到str3中。
void print():输出插入后的字符串。
(3)在主程序中定义STRING类的对象test对该类进行测试。

程序如下:
#include <iostream.h>
#include <string.h>
class STRING{
char str1[60],str2[40],str3[100];
public:
STRING(char *s1,char *s2)
{
strcpy(str1,s1);
strcpy(str2,s2);
}
void process()
{
int k=strlen(str1);
int p=strlen(str2);
int i=0,j=0;
char ss[100];
for (i=p;str1[i];i++){
ss[i-p]=str1[i];ss[k-p]=0;}
for (i=k;i>=0;i--){
str1[i+i]=str1[i];}
for (;str2[j];j++){
str1[j+j+1]=str2[j];}
strcpy(str3,str1);
str3[p+p]=0;
int l=strlen(str3);
int u=strlen(ss);
for(i=0;ss[i];i++)
str3[l+i]=ss[i];
str3[l+u]=0;
}
void print()
{
cout<<"变化后为:"<<str3<<endl;
}
};
void main()
{
char s1[80],s2[40];
cin.getline(s1,60);
cin.getline(s2,40);
STRING test(s1,s2);
test.process();
test.print();
}

等高手...

1、首先在C语言中,string.h中的_strrev函数,声明形式如下。

2、使用_strrev函数,进行示例代码展示,如下图所示。

3、对于string形式的字符串变量,使用reverse函数,声明形式如下。

4、然后使用reverse函数,进行代码示例展示,如下图所示。

5、自己编写字符串反转函数,进行示例代码展示,如下图所示就完成了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-08
程序写的好乱 就拿错误来讲 你ss[k-p]=0 假如k<p怎么办 怎么会数组不越界?
第2个回答  推荐于2018-04-05
#include <iostream>
#include <cstring>

using namespace std;
class STRING
{
    char str1[60];
    char str2[40];
    char str3[100];
public:
    STRING(char *s1,char *s2);
    void process();
    void print();
};

STRING::STRING(char *s1,char *s2)
{
    strcpy(str1,s1);
    strcpy(str2,s2);
}

void STRING::process()
{
    int count=0;
    int i,j;
    for( i=0;str1[i]!='\0'&&str2[i]!='\0';i++)
        {
            str3[count++]=str1[i];
            str3[count++]=str2[i];
        }
    for(j=i;str2[j]!='\0';j++)
        str3[count++]=str2[j];
    for(j=i;str1[j]!='\0';j++)
        str3[count++]=str1[j];
     str3[count]='\0';
}

void STRING::print()
{
    cout<<"str3="<<str3<<endl;
}
int main()
{
    char *s1="abcde";
    char *s2="ABCDEFG";
    STRING test(s1,s2);
    test.process();
    test.print();
    return 0;
}

本回答被提问者和网友采纳
第3个回答  2019-02-27
在void print前加一个str3[l]='/0'试试?
第4个回答  2013-01-09
初始化s1、s2、s3.追问

s1、s2的值是通过键盘键入的呀,怎么初始化呢,具体怎么改呀?

相似回答