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

#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 ",str);
}

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

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

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

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

void StrClear(char str[])//清空串
{
str[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]='';
}

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]='';
}

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

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("串的长度为: ");
printf("%d %d ",len1,len2);
StrCat(str1,str2);
OutPut(str1);
StrSub(str1,sub,2,3);
OutPut(sub);
int index=Find_Index(str1,str2);
if(index)
printf("子串起始位置为: %d ",index);
else
printf("ERRER ");
StrInsert(str1,str2,2);
OutPut(str1);
StrDelete(str1,2,len2);
OutPut(str1);
StrClear(str1);
if(!StrEmpty(str1))
printf("NULL ");
return 0;
}

原文地址:https://www.cnblogs.com/alan-W/p/6001784.html