串运算C与C++

题目描述
  写一个函数将顺序串s1中的第i个字符到第j个字符之间的字符用s2串替换
思路分析
  类比插入,在插入函数中,要留出位置插入要插入的字符串,所以要保留原位置的数据,而对于替换,只需要插入,不用管原先的位置即可。
  然而有很多情况,这里考虑情况较少,下面附C++与C代码不同语言编写,同时一个使用链串一个使用顺序串,以此巩固学习。
  C++代码,建立LinkString Class,其中用到运算符重载,作用是赋字符串。

#include <iostream>
#define MAXSIZE 100 
using namespace std;

struct LinkNode{
	char data;
	LinkNode *next;
};

class LinkStringClass{
	LinkNode *head;
public:
	LinkStringClass();
	~LinkStringClass();
	int StrLength();
	LinkStringClass &operator=(char *cstr);
	LinkStringClass &RepStr(int i,int j,LinkStringClass &s);
	void CreatStr();
	void DispStr();
};

LinkStringClass::LinkStringClass(){
	head=new LinkNode();
	head->next=NULL;
}

LinkStringClass::~LinkStringClass(){
	LinkNode *pre,*p;
	pre=head;
	p=pre->next; 
}

int LinkStringClass::StrLength(){
	int i=0;
	LinkNode *p=head->next;
	while(p!=NULL){
		i++;
		p=p->next;
	}
	return i;
}

LinkStringClass &LinkStringClass::operator=(char cstr[]){
	int i;
	LinkNode *r=head,*p;
	for(i=0;i<cstr[i]!='\0';i++){
		p=new LinkNode();
		p->data=cstr[i];
		r->next=p;
		r=p;
	}
	r->next=NULL;
	return *this;	
}

LinkStringClass &LinkStringClass::RepStr(int i,int j,LinkStringClass &s){
	static LinkStringClass nstr;
	int k;
	LinkNode *p=head->next,*p1=s.head->next,*q,*r;
	r=nstr.head;
	if(i<0||i>StrLength()||j<0||i+j-1>StrLength()) return nstr;
	for(k=0;k<i-1;k++){
		q=new LinkNode();
		q->data=p->data;
		r->next=q;
		r=q;
		p=p->next; 
	}
	for(k=0;k<j;k++) p=p->next;
	while(p1!=NULL){
		q=new LinkNode();
		q->data=p1->data;
		r->next=q;
		r=q;
		p1=p1->next;
	}
	while(p!=NULL){
		q=new LinkNode();
		q->data=p->data;
		r->next=q;
		r=q;
		p=p->next; 
	}
	r->next=NULL;
	return nstr;
}

void LinkStringClass::DispStr(){
	LinkNode *p=head->next;
	while(p!=NULL){
		cout<<p->data;
		p=p->next;
	}
	cout<<endl;
}

int main(){
	while(1){
		char s1[MAXSIZE],s2[MAXSIZE];
		cout<<"Input string1:";
		cin>>s1;
		cout<<"Input string2:";
		cin>>s2;
		cout<<"Input i and j:";
		int i,j,temp;
		cin>>i>>j;
		LinkStringClass t1,t2,m;
		t1=s1;t2=s2;
		m=t1.RepStr(i,j,t2);
		m.DispStr();
		cout<<"0.continue 1.break:";
		cin>>temp; 
		if(temp) break;
	}
	return 0;
}

  C代码,建立结构体,顺序串编译。

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct{
    char ch[MAXSIZE];
    int len;
}SString;

int StrRepalce(SString *s,int posi,int posj,SString t);
int StrInit(SString *s);
int StrLength(SString s);
int StrCreat(SString *s);

int main(){
    SString s1,s2;
    int i,j,temp;
    while(1){
        StrCreat(&s1);
        StrCreat(&s2);
        printf("Input i and j:\n");
        scanf("%d%d",&i,&j);
    	StrRepalce(&s1,i-1,j-1,s2);
        printf("0.Continue 1.break:");
        scanf("%d",&temp);
        if(temp) break;
    }
    return 0;
}

int StrInit(SString *s){
	s->len=0;
	return 1;
}

int StrLength(SString s){
	return s.len;
}

int StrCreat(SString *s){
	StrInit(s);
	printf("Input string:");
    scanf("%s",s->ch);
    s->len=strlen(s->ch);
    return 1;
}

int StrRepalce(SString *s,int posi,int posj,SString t){
    int i;
    if(posi>=posj||posi<0||s->len>MAXSIZE||posi>s->len||posj-posi+1>t.len) return 0;
    for(i=posi;i<=posj;i++){
    	s->ch[i]=t.ch[i-posi];
	} 
    puts(s->ch);
    return 1;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值