数据结构:串的一些基本操作

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<math.h>
#include<map>
#define INF 0xffffffff
#define MAX 10005
#define Temp 1000000000
#define MOD 1000000007

void OutPut(char str[])//打印串
{
printf("%s\n",str);
}

void StryCopy(char str1[],char str2[])//复制串身str2到str1
{
int i;
for(i=0;str2[i]!='\0';i++)
str1[i]=str2[i];
str1[i]='\0';
}

bool StrEmpty(char str[])//判断是否为空串
{
if(str[0]=='\0')
return false;
return true;
}

bool StrCpy(char str1[],char str2[])//比较串str1是否大于身str2
{
int i=0,j=0;
while(str1[i]!='\0' && str2[j]!='\0')
{
if(str1[i] > str2[j])
return true;
else if(str1[i] < str2[j])
return false;
else
{
i++;
j++;
}
}
if(str1[i]!='\0')
return true;
return false;
}

int StrLength(char str[])//计算串的长度
{
int length=0;
for(int i=0;str[i]!='\0';i++)
length++;
return length;
}

void StrClear(char str[])//清空串
{
str[0]='\0';
}

void StrCat(char str1[],char str2[])//将串str2添加到串str1
{
int len1=StrLength(str1);
int len2=StrLength(str2);
for(int i=0;i<len2;i++)
str1[len1+i]=str2[i];
str1[len1+len2]='\0';
}

void StrSub(char str[],char sub[],int pos,int len)//获取从pos位置起长度为len的子串
{
int i;
for(i=0;i<len;i++)
{
sub[i]=str[pos-1+i];
}
sub[i]='\0';
}

int Find_Index(char str1[],char str2[])//查找是否含有子串,并返回起始下标
{
for(int i=0;str1[i]!='\0';i++)
{
if(str1[i]==str2[0])
{
for(int j=0;str2[j]!='\0';j++)
{
if(str1[i+j]!=str2[j])
break;
}
if(str2[i]=='\0')
return i+1;
}
}
return -1;
}

void StrInsert(char str1[],char str2[],int pos)//从pos位置起,插入一个串
{
int len1=StrLength(str1);
int len2=StrLength(str2);
int j=0;
for(int i=len1-1;i>=pos-1;i--)
str1[i+len2]=str1[i];
for(int i=0;i<len2;i++)
str1[pos-1+(j++)]=str2[i];
}

void StrDelete(char str[],int pos,int len)//从pos位置起,删除长度为len的串
{
int len1=StrLength(str);
for(int i=pos-1;i<(pos+len-1);i++)
str[i]=str[i+len];
str[len1-len]='\0';
}

void InPut(char str1[],char str2[])
{
scanf("%s%s",str1,str2);
}

int main()//主函数仅为演示
{
char str1[MAX],str2[MAX],sub[MAX];
InPut(str1,str2);
OutPut(str1);
int len1=StrLength(str1);
int len2=StrLength(str2);
printf("串的长度为:\n");
printf("%d %d\n",len1,len2);
StrCat(str1,str2);
OutPut(str1);
StrSub(str1,sub,2,3);
OutPut(sub);
int index=Find_Index(str1,str2);
if(index)
printf("子串起始位置为:\n%d\n",index);
else
printf("ERRER\n");
StrInsert(str1,str2,2);
OutPut(str1);
StrDelete(str1,2,len2);
OutPut(str1);
StrClear(str1);
if(!StrEmpty(str1))
printf("NULL\n");
return 0;
}

转载于:https://www.cnblogs.com/alan-W/p/6001784.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值