字符串的操作

#include <stdio.h>

void StrAssign(char *T,char *chars)
{
	int i=0;
	while(*(chars+i))
	{
		*(T+i)=*(chars+i);
		i++;
	}
}

void StringCopy(char T[],char s[])
{
	int i=0;
	while(s[i]!='\0')
	{
		T[i]=s[i];
		i++;
	}
}

int StringEmpty(char s[])
{
	if(*s=='\0')
		return 1;
	return 0;
}
 
void ClearString(char s[])
{
	int i=0;
	while(s[i]!='\0')
	{
		s[i] = '\0';
		i++;
	}
}

int StringLength(char s[])
{
	int i=0;
	while(s[i]!='\0')
		i++;
	return i;
}

int StrCompare(char s[],char T[])
{
	int i;
	for(i=0;s[i]!='\0';i++)
	{
		if(s[i]==T[i])
			continue;		
		else if(s[i]>T[i]) 
			return 1;
		else
			return -1;
	 }
	 if(s[i]=='\0')
	 return 0;
}

void Concat(char S1[],char s[],char T[])
{
	int i=0,j;
	while(s[i]!='\0')
	{
		S1[i]=s[i];
		i++;
	}
	for(j=0;T[j]!='\0';j++)
	{
		S1[i]=T[j];
		i++;
	}
	S1[i]='\0';
}

void SubString(char s1[],char s[],int pos,int len)
{
	int i,j;
	if(1<=pos&&pos<=StringLength(s)&&0<=len&&len<=StringLength(s)-pos+1)
	{
		for(i=0,j=pos-1;i<len;i++)
		{
			s1[i]=s[j];
			j++;
		}
		s1[i]='\0';
	}
	else
	printf("将pos后的len个字符赋给S1失败");
}

//若主串的第pos个字符 之后存在与T相等的子串,则返回第一个这样的子串在s中的位置,否则返回0 
int Index(char s[],char T[], int pos)
{
	int n,m,i;
	char  sub[100];
	if(pos>0)
	{
		n=StringLength(s);
		m=StringLength(T);
		i=pos;
		while(i<=n-m+1)
		{
			SubString(sub,s,i,m);		//取主串的第I个位置给sub,长度与T相等子串给sub 
			if(StrCompare(sub,T)!=0)
				++i;
			else 
				return i;
		}
	}
	return 0;
}

int StrDelete(char s[],int pos,int len)
{
	if(1<=pos&&pos<=StringLength(s)-len+1)
	{
		int i,j;
		i=pos-1;
		j=pos+len-1;
		while(s[j]!='\0')
		{
			s[i]=s[j];
			j++;
			i++;
		}
		s[i]='\0';
		return 1;
	}
	else
		return 0;	
}

int StrInsert(char s[],int pos,char T[])
{
	if(1<=pos&&pos<=StringLength(s)+1)
	{
		int i,j,n;
		n=StringLength(T);
		j=StringLength(s);
		i=j+n-1;
		s[i+1]=s[j];
		while(j>=pos)
		{
			s[i]=s[j-1];
			i--;
			j--;
		}
		i = 0;
		while(j<pos+n-1)
		{
			s[j]=T[i];
			i++;
			j++;
		}
		return 1;
	} 
	return  0;
}
//串S,v,t都存在T是非空串,用V替换主串s中出现的所有与t相等的不重叠的子串
void Replace(char s[],char T[],char v[])
{
	int n=1;
	int	m=Index(s,T,n);
	while(m)
	{
		n=m+StringLength(T);
		StrDelete(s,m,StringLength(T));
		StrInsert(s,m,v);
		m=Index(s,T,n);
	}
} 

int main()
{
	char s[100];
	printf("字符串的初始化\n请输入字符串:");	
	gets(s);
	printf("字符串s初始化结果如下%s",s);
	char T[100];
	StrAssign(T,s);
	StringCopy(T,s);
	printf("\n将字符串s复制得字符串如下%s",T);

	if(StringEmpty(s))
		printf("\n字符串S为空");
	else
		printf("\n字符串不为空");
		
	printf("\n字符串长度为%d",StringLength(s));
	
	printf("\n输入与第一个字符串长度相同字符串T:");
	gets(T);	
	if(StrCompare(s,T)==0)
		printf("两个字符串相等"); 
	else if (StrCompare(s,T)==1)
		printf("前一个字符串大"); 
	else
		printf("后一个字符串大"); 
	
	char S1[100];
	Concat(S1,s,T);
	printf("\n将字符串S与T合并后为%s",S1);
	
	
	int temp,m;
	printf("\n将s第几个位置的后的多少个元素赋值给S1:  ");
	scanf("%d",&temp);
	scanf("%d",&m);
	SubString(S1,s,temp,m);
	printf("复制给S1后为%s",S1);
	
	printf("\n请输入要将S的第几个位置的多少个元素删除");
	scanf("%d",&temp);
	scanf("%d",&m);
	StrDelete(s,temp,m);
	printf("%s",s);
	
	printf("\n要将T插入到S中,输入字符串T:");
	getchar(); 
	gets(T);
	printf("输入字符串插入的位置");
	scanf("%d",&temp); 
	StrInsert(s,temp,T);
	printf("将字符T插入到S的第i个字符后字符串S为%s",s);
	
	getchar();
	printf("\n字符串的比较,输入与S进行比较字符串T:"); 
	gets(T); 
	if(Index(s,T,1)) 
		printf("在S的第%d个字符后存在与T相等的子串",Index(s,T,2)); 
	else
		printf("s中第21个字符后不存在与T相等的子串");
	
	
	printf("\n输入要替换的字符串");
	gets(T);
	printf("输入要将%s替换成那一个字符串",T);	
	char V[100]; 
	gets(V);
	Replace(s,T,V);
	printf("替换后的字符串s为%s",s);
	ClearString(s);
	printf("\n字符串s已经被清空");
	



	
	return 0;
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值