串的基本操作及应用

一、实验目的:

1、掌握字符串的基本操作;

2、掌握字符串函数的基本使用方法;

3、加深对字符串的理解,逐步培养解决实际问题的编程能力。

二、实验内容和要求:

1、编写函数,串用定长顺序存储表示来实现串的基本操作;

2、编写串的匹配算法,实现查找功能。

三、源程序

#include <stdio.h>

#include <stdlib.h>

#define  MAX_NUM 100

typedef struct str{

    char ch[MAX_NUM+1];

    int length;



}*SString;

//字符串初始化

SString initSString()

{

      SString str=(SString)malloc(sizeof(struct str));

      if(!str)

            printf("动态内存分配失败!\n");

      str->length=0;



     // printf("串初始化成功!\n");

      return str;

     



}

//判断字符串是否为空

int isEmpty(SString str)

{

      if(!str->length)

      {

            return 1;

      }

      return 0;

}

//字符串赋值

SString strAssign(SString str,char s[])

{



      int i=0;

      while(s[i])

      {

            str->ch[++str->length]=s[i];

            i++;

      }

      return str;

}

//打印字符串

void printSString(SString str)

{

      int i;





      for(i=1;i<=str->length;i++)

            printf("%c",str->ch[i]);

      printf("\n");

}

//字符串复制

SString   strCopy(SString str1,SString str2)

{

      int i;

      for(i=1;i<=str2->length;i++)

      {

            str1->ch[i]=str2->ch[i];

      }

      str1->length=str2->length;

      return str1;

}

SString strCat(SString str1,SString str2)

{

      SString str3=initSString();

      int i;

      for(i=1;i<=str1->length;i++)

            str3->ch[i]=str1->ch[i];

      for(i=1;i<=str2->length;i++)

            str3->ch[i+str1->length]=str2->ch[i];

      str3->length=str1->length+str2->length;

      return str3;



}

//获取字符串的长度

int getStrLength(SString str)

{

      return str->length;

}



//在串str1的pos位置插入串str2

SString strInsert(SString str1,int pos,SString str2)

{

      if(pos<1||pos>str1->length)

      {

             printf("插入位置错误!\n");

             exit(0);

      }

      int i;

      for(i=pos;i<=str1->length;i++)

      {

            str1->ch[i+str2->length]=str1->ch[i];

      }

      for(i=1;i<=str2->length;i++)

      {

            str1->ch[i+pos-1]=str2->ch[i];

      }

      str1->length=str2->length+str1->length;

      return str1;

}



//删除指定位置的字符

SString strDelete(SString str,int pos,int len)

{

      if(pos<1||pos>str->length||len+pos-1>str->length)

      {

             printf("删除位置错误!\n");

             exit(0);

      }



      int i;

      for(i=pos+len;i<=str->length;i++)

      {



            str->ch[i-len]=str->ch[i];

      }

      str->length=str->length-len;

      return str;



}

//求子串

SString subString(SString str,int pos,int len)

{

      if(pos<1||pos>str->length||len+pos-1>str->length)

      {

             printf("输入位置错误!\n");

             exit(0);

      }

      int i;

      SString subStr=initSString();

      for(i=1;i<=len;i++)

      {

            subStr->ch[i]=str->ch[i+pos-1];

      }

      subStr->length=len;

      return subStr;

}

//销毁字符串

void destorySString(SString str1)

{



      free(str1);

}

int main()

{

      SString str=initSString(),str2=initSString();

      char s[100],s2[100],s3[100],s4[100];

      printf("请输入一个字符串str1:\n");

      scanf("%s",s);







      str=strAssign(str,s);

      printf("打印字符串str1:\n");

      printSString(str);



      printf("拷贝字符串str1到字符串str2\n");



      strCopy(str2,str);

      printf("打印字符串str2:\n");



      printSString(str2);



      /*SString str3=strCat(str,str2);

      printSString(str3);*/

      int insertLocation;



      printf("请输入插入位置、插入字符串str4:\n");





      scanf("%d",&insertLocation);

      scanf("%s",s4);

      SString str4=initSString();

      str4=strAssign(str4,s4);





      str=strInsert(str,insertLocation,str4);

       printf("打印插入str4后的字符串str1:");

      printSString(str);





      int delLocation,delLength;

      printf("请输入字符串str1删除字符的位置和长度:\n");

      scanf("%d %d",&delLocation,&delLength);



      strDelete(str,delLocation,delLength);

      printSString(str);



      int subLocation,subLength;

      printf("请输入字符串str1的子串位置和长度:\n");

      scanf("%d %d",&subLocation,&subLength);

      SString subStr=  subString(str,subLocation,subLength);

      printSString(subStr);



      printf("销毁字符串st1:\n");

      destorySString(str);





    return 0;

}



四、实验结果

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值