3008: 链串的基本运算

时间限制: 1 Sec  内存限制: 128 MB

提交: 1  解决: 1

题目描述

编写一个程序,实现链串的各种基本运算,主函数已给出,请补充每一种方法。

1、建立串s="abcdefghefghijklmn",和串s1="xyz";

2、输出串s;

3、输出串s的长度;

4、在串s的第九个字符位置插入串s1而产生s2;

5、输出串s2;

6、删除串s的第二个字符开始的五个字符而产生串s2;

7、输出串s2;

8、将串s第二个字符开始的五个字符替换成串s1而产生串s2;

9、输出串s2;

10、提取串s的第二个字符开始的10个字符而产生s2;

11、输出串s3;

12、将串s1和串s2连接起来而产生串s3;

13、输出串s3;

链串的定义为

typedef struct Node
{
    char data;
    struct Node *next;
} LiString;
 
主函数:
int main()
{
    LiString *s,*s1,*s2,*s3;
    char c[]="abcdefghefghijklmn",d[]="xyz";
    StrAssign(s,c);                             //建立串
    StrAssign(s1,d);
    DispStr(s);                                 //输出串
    StrLength(s);
    s2=InsStr(s,9,s1);                          //将s1插入到s的第九个位置
    DispStr(s2);
    s2=DelStr(s,2,5);                           //删除s第二个字符开始的五个字符
    DispStr(s2);
    s2=RepStr(s,2,5,s1);                        //将串s第二个字符开始的五个字符替换成串s1
    DispStr(s2);
    s2=TiStr(s,2,10);                           //提取串s的第二个字符开始的10个字符
    DispStr(s2);
    s3=Concat(s1,s2);                           //将串s1和串s2连接起来
    DispStr(s3);
    return 0;
}

输入

输出

样例输出

abcdefghefghijklmn
18
abcdefghxyzefghijklmn
aghefghijklmn
axyzghefghijklmn
bcdefghefg
xyzbcdefghefg

提示

请使用C++编译并提交

迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方…

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char data;
struct Node *next;
} LiString;
void StrAssign(LiString *&s,char cstr[])
{
int i;
LiString *r,*p;
s=(LiString *)malloc(sizeof(LiString));
r=s;
for(i=0; i<(int)strlen(cstr); i++)
{
p=(LiString*)malloc(sizeof(LiString));
p->data=cstr[i];
r->next=p;
r=p;
}
r->next=NULL;
}
void DispStr(LiString *s)
{
LiString *p=s->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
void StrLength(LiString *s)
{
int i=0;
LiString *p=s->next;
while(p!=NULL)
{
i++;
p=p->next;
}
printf("%d\n",i);
}
LiString *InsStr(LiString *s,int i,LiString *t)
{
int k;
LiString *str,*p=s->next,*p1=t->next,*q,*r;
str=(LiString*)malloc(sizeof(LiString));
str->next=NULL;
r=str;
for(k=1; k<i; k++)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
while(p1!=NULL)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p1->data;
r->next=q;
r=q;
p1=p1->next;
}
while(p!=NULL)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str; }
LiString *DelStr(LiString *s,int i,int j)
{
int k;
LiString *str,*p=s->next,*q,*r;
str=(LiString*)malloc(sizeof(LiString));
str->next=NULL;
r=str;
for(k=0; k<i-1; k++)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
for(k=0; k<j; k++)p=p->next;
while(p!=NULL)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str;
}
LiString *RepStr(LiString *s,int i,int j,LiString *t)
{
int k;
LiString *str,*p=s->next,*p1=t->next,*q,*r;
str=(LiString*)malloc(sizeof(LiString));
str->next=NULL;
r=str;
for(k=0; k<i-1; k++)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
q->next=NULL;
r->next=q;
r=q;
p=p->next;
}
for(k=0; k<j; k++)p=p->next;
while(p1!=NULL)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p1->data;
q->next=NULL;
r->next=q;
r=q;
p1=p1->next;
}
while(p!=NULL)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
q->next=NULL;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str;
}
LiString *TiStr(LiString *s,int i,int j)
{
LiString *str;
int k=0,m=0;
char c[50]= {0};
while(s!=NULL)
{
k++;
if(k<=i+j&&k>i)c[m++]=s->data;
s=s->next;
}
StrAssign(str,c);
return str;
}
LiString *Concat(LiString *s,LiString *t)
{
LiString *str,*p=s->next,*q,*r;
str=(LiString*)malloc(sizeof(LiString));
r=str;
while(p!=NULL)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
p=t->next;
while(p!=NULL)
{
q=(LiString*)malloc(sizeof(LiString));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str;
}
int main()
{
LiString *s,*s1,*s2,*s3;
char c[]="abcdefghefghijklmn",d[]="xyz";
StrAssign(s,c); //建立串
StrAssign(s1,d);
DispStr(s); //输出串
StrLength(s);
s2=InsStr(s,9,s1); //将s1插入到s的第九个位置
DispStr(s2);
s2=DelStr(s,2,5); //删除s第二个字符开始的五个字符
DispStr(s2);
s2=RepStr(s,2,5,s1); //将串s第二个字符开始的五个字符替换成串s1
DispStr(s2);
s2=TiStr(s,2,10); //提取串s的第二个字符开始的10个字符
DispStr(s2);
s3=Concat(s1,s2); //将串s1和串s2连接起来
DispStr(s3);
return 0;
}

YTU 3008: 链串的基本运算的更多相关文章

  1. YTU 3007: 顺序串的基本运算

    3007: 顺序串的基本运算 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 题目描述 编写一个程序,实现顺序串的各种基本运算,主函数已给出,请补充每一种方法. 1.建立 ...

  2. _DataStructure_C_Impl:链串

    //_DataStructure_C_Impl:链串 #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  3. python学习1-字符串数字基本运算以及if条件和while循环

    python学习1-字符串数字基本运算以及if条件和while循环 字符串表达形式共四种: name = "string" name = 'string' name = " ...

  4. C语言——循环队列和链队列的基本运算

    // 循环队列#include <stdio.h> #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20 ...

  5. 数据结构(c语言第2版)-----了解链表,栈,队列,串

    关于链表我觉得这都是最基本的东西,但是不常见,在实际的应用中很少的使用,了解它会用就OK,不需要研究的那么深,除非做那种内存压缩,存储方面工作. C语言中动态申请空间 malloc() q=(dlin ...

  6. JavaScript责任链模式

    介绍 责任链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理 ...

  7. 【数据结构(C语言版)系列四】 串

    串类型的定义 串(或字符串)是由零个或多个字符组成的有限序列,一般记为 s = 'a1a2...an',s为串名.子串在主串中的位置以子串的第一个字符在主串中的位置来表示. 串和表示和实现——定长顺序 ...

  8. RxJava如何结合观察者与链式处理

    RxJava如何结合观察者与链式处理 Author: Dorae Date: 2018年12月3日17:10:31 转载请注明出处 一.概述 首先问自己几个问题,如果非常清楚这几个问题的目的与答案,那 ...

  9. nginx应用总结(1)--基础认识和应用配置

    在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介Nginx是一个高性能的HTTP和反向代理服务 ...

随机推荐

  1. log4j2.x 配置文件默认寻找顺序

    Automatic Configuration Log4j has the ability to automatically configure itself during initializatio ...

  2. 如何修改DBSNMP和SYSMAN用户的密码

    SYSMAN和DBSNMP用户密码过期后OEM无法使用,并报以下错误: SYSMAN用户的密码被加密后存放在不同的地方,这样database control(OMS和agent)可以不用每次访问数据库 ...

  3. zabbix服务器监控suse系统教程

    zabbix服务器监控suse系统教程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 花了近一个星期才学会了如何监控window和linux主机的基本信息以及报价情况(我已经把笔记 ...

  4. SQL 数据库 right join 和left join 的区别

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...

  5. Java初学--无限循环

    利用for循环和while循环分别做到,从键盘读取任意数,输入0自动跳出无限循环,并判断有几个正数几个负数. 1.for循环的无限循环: import java.util.Scanner;//引用Sc ...

  6. HTML调用servlet(二)

    5.修改数据 5.1编写查询条件页面 修改单条数据的时候,首先是查询出单个数据的详细信息,然后根据实际需要部分修改或者全部修改.修改之后,数据会提交到数据库,数据库中保存更新以后的数据. 查询出单条数 ...

  7. Ubuntu Firefox installs Flashplayer

    Adobe flash 下载(https://get.adobe.com/flashplayer/)  tar.gz版本(注:adobe 提供了yum,rpm,tar.gz和APT四种版本,yum和t ...

  8. Java基础(1):Switch语句注意的5个地方

    不得不说的几点小秘密: 1. switch 后面小括号中表达式的值必须是整型或字符型 2. case 后面的值可以是常量数值,如 1.2:也可以是一个常量表达式,如 2+2 :但不能是变量或带有变量的 ...

  9. .NET: 配置文件

    VS里项目->添加新项->应用程序配置文件 <?xml version="1.0" encoding="utf-8" ?> <co ...

  10. linux时钟同步

    方法1. ntpdate ip 搜索时钟服务器.找一个靠谱的时钟ip执行以上命令即可 可以把这个加入crontab中定时同步.# /usr/sbin/ntpdate 210.72.145.44 > ...