#include<iostream>
using namespace std;
#include<stdlib.h>
#define MAXSTRLEN 100
typedef struct{
char ch[MAXSTRLEN];
int length;
}HString;
//串S1和串S2连接成串S
char Concat(char *S1,char *S2,int s1_len,int s2_len)
{ HString S;
S.length=s1_len+s2_len;
int a,b=0,i=0;
for(i;i<s1_len;i++,S1++) //将串S1赋值给串S
S.ch[i]=*S1;
for(a=S.length-s2_len;a<S.length;a++,S2++) //将串S2连接在串S1的后面
S.ch[a]=*S2;
cout<<"\n串S1和串S2连接成串S :";
for(b;b<S.length;b++) //输出连接后的串S
cout<<S.ch[b];
return 0;}
//返回子串在主串中的位置
int Index(HString &S,HString &T)
{ int i=0;
int j=0;
while (i<S.length && j<T.length){
if (S.ch[i] == T.ch[j]){
i++;
j++;
}
else{
i=i-j+1;
j=0;
}
}
if (j>T.length-1)
return i-T.length;
else
return 0;
}
//输出串
int Show(HString &S)
{
for(int i=0; i<S.length; i++)
cout<<S.ch[i];
return 0;
}
//删除S串中与T串相等的串
void detele(){
HString S,T;
cout<<"请输入串S的长度:";
cin>>S.length;
cout<<"请输入串S:" ;
for(int i=0;i<S.length;i++)
cin>>S.ch[i];
cout<<"请输入需要删除串的长度:";
cin>>T.length;
cout<<"\n请输入需要删除的串:";
for(int j=0; j<T.length; j++)
cin>>T.ch[j];
cout<<endl;
int pos = Index(S,T);
for(int i=pos+T.length; i<S.length; i++)
S.ch[i-T.length] =S.ch[i];
S.length-=T.length;
cout<<"删除后串S为:";
Show(S);
}
//用V串替换S串中的T串
int Replace(HString &S,HString &T)
{HString V;
V.length = T.length;
cout<<"输入需要替换的串V:";
for(int i=0; i<V.length; i++)
cin>>V.ch[i];
int pos = Index(S,T);
for(int k=0; k<V.length; k++)
{S.ch[pos] = V.ch[k];
pos++;}
Show(S);
return 0;
}
int main()
{ HString S;
HString T;
char S1[MAXSTRLEN],S2[MAXSTRLEN];
int i=0; int s1_len,s2_len;
cout<<"请输入串S1的长度:";
cin>>s1_len;
cout<<"请输入串S1:";
for(i;i<s1_len;i++)
cin>>S1[i];
cout<<"请输入串S2的长度:";
cin>>s2_len;
cout<<"请输入串S2:";
for(i;i<s2_len;i++)
cin>>S2[i];
Concat( S1,S2,s1_len,s2_len);
cout<<"请输入被替换串T的长度:\n";
cin>>T.length;
cout<<"请输入串T:";
for(int t=0; t<T.length; t++)
cin>>T.ch[t];
Replace(S,T);
detele();
return 0;
}
代码出错,应该如何改捏?问题应该不大(原代码和具体错误如下图)谢谢!!!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 正在学C++ 2021-05-04 16:22关注
#include<iostream> using namespace std; #include<stdlib.h> #define MAXSTRLEN 100 typedef struct{ char ch[MAXSTRLEN]; int length; }HString; //串S1和串S2连接成串S HString Concat(char *S1,char *S2,int s1_len,int s2_len)//???????????????????????函数类型换成HString { HString S; S.length=s1_len+s2_len; int a,b=0,i=0; for(i;i<s1_len;i++,S1++) //将串S1赋值给串S S.ch[i]=*S1; for(a=S.length-s2_len;a<S.length;a++,S2++) //将串S2连接在串S1的后面 S.ch[a]=*S2; cout<<"\n串S1和串S2连接成串S :"; for(b;b<S.length;b++) //输出连接后的串S cout<<S.ch[b]; return S; //???????????????????????????????返回S } //返回子串在主串中的位置 int Index(HString &S,HString &T) { int i=0; int j=0; while (i<S.length && j<T.length){ if (S.ch[i] == T.ch[j]){ i++; j++; } else{ i=i-j+1; j=0; } } if (j>T.length-1) return i-T.length; else return 0; } //输出串 int Show(HString &S) { for(int i=0; i<S.length; i++) cout<<S.ch[i]; return 0; } //删除S串中与T串相等的串 void detele(){ HString S,T; cout<<"请输入串S的长度:"; cin>>S.length; cout<<"请输入串S:" ; for(int i=0;i<S.length;i++) cin>>S.ch[i]; cout<<"请输入需要删除串的长度:"; cin>>T.length; cout<<"\n请输入需要删除的串:"; for(int j=0; j<T.length; j++) cin>>T.ch[j]; cout<<endl; int pos = Index(S,T); for(int i=pos+T.length; i<S.length; i++) S.ch[i-T.length] =S.ch[i]; S.length-=T.length; cout<<"删除后串S为:"; Show(S); } //用V串替换S串中的T串 int Replace(HString &S,HString &T) { HString V; V.length = T.length; cout<<"输入需要替换的串V:"; for(int i=0; i<V.length; i++) cin>>V.ch[i]; int pos = Index(S,T); for(int k=0; k<V.length; k++) { S.ch[pos] = V.ch[k]; pos++; } Show(S); return 0; } int main() { HString S; HString T; char S1[MAXSTRLEN],S2[MAXSTRLEN]; int i=0; int s1_len,s2_len; cout<<"请输入串S1的长度:"; cin>>s1_len; cout<<"请输入串S1:"; for(i;i<s1_len;i++) cin>>S1[i]; cout<<"请输入串S2的长度:"; cin>>s2_len; cout<<"请输入串S2:"; for(i=0;i<s2_len;i++) //??????????????????????????????i=0 cin>>S2[i]; S = Concat( S1,S2,s1_len,s2_len); //????????????????????用S作为链接后的串 cout<<"请输入被替换串T的长度:\n"; cin>>T.length; cout<<"请输入串T:"; for(int t=0; t<T.length; t++) cin>>T.ch[t]; Replace(S,T); //?????????????????????????S从来没用过,为空,不能替换 detele(); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 AT89C51控制8位八段数码管显示时钟。
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题