数据结构:串的一些基本操作
#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;
}