在链串中,设计一个算法把最先出现的子串"ab"改为"xyz"
/*
*思路:在串s中找到最先出现的子串"ab",p指向data域值为'a'的结点,其后为data域值为'b'结点。将他们的data
*域值分别改为'x'和'z',再创建一个data域值为'y'的结点,将其插入到*p之后。
*/
#include <iostream>
using namespace std;
typedef struct snode{
char data;
struct snode *next;
}LiString;
void StrAssign(LiString * &s,char cstr[]){
int i;
LiString *r,*p;
s = new LiString;
r=s;
for(i=0;cstr[i]!='\0';i++){
p = new LiString;
p->data = cstr[i];
r->next = p;
r=p;
}
r->next=NULL;
}
void Change(LiString *&s){
LiString *p = s->next , *q;
int find =0;
while(p->next!=NULL&&find==0){
if(p->data=='a'&&p->next->data=='b'){
p->data='x';
p->next->data='z';
q = new LiString;
q->data='y';
q->next=p->next;
p->next=q;
find=1;
}
else p=p->next;
}
}
void DisStr(LiString *&s){
LiString *p=s->next;
while(p!=NULL){
cout<<p->data;
p=p->next;
}
cout<<endl;
}
int main(){
LiString *s;
char cstr[100];
gets(cstr);
StrAssign(s,cstr);
Change(s);
DisStr(s);
return 0;
}