2021-11-07 删除字符串

【问题描述】编写一个程序,把一个字符串中出现的对应子串都删除。建议使用字符串的定长存储方式(静态存储)。

#define MAXSTRLEN 255
typedef char SString[MAXSTRLEN+1];

【输入形式】用户在第一行输入一个字符串,用户在第二行输入一个子串。
【输出形式】程序在下一行输出删除其中所有子串后的字符串。如果字符串不包含子串则输出原字符串本身。

【样例输入】
 I am a boy!
 a            
【样例输出】
 I m  boy!      
【样例说明】用户首先输入字符串I am a boy!,然后输入子串a,程序会寻找字符串中的子串删除它,最后将删除后的结果输出:I m boy!  

【运行结果如下】

【代码如下】

#include<stdio.h> 
#define ERROR -1
#define OK 1
#define MAXSTRLEN 255   		//用户可在255以内定义最长串长
typedef char SString[MAXSTRLEN+1];		//0号单元存放串的长度
typedef int Status;

 
/*赋值*/  
Status StrAssign(SString &S)
{	
	int i = 0;
	int k = 0;
	int len = 0;
	char ch[254];
	gets(ch);
	while (ch[i++] != '\0')	  len++;	//获取ch的长度
	i = 1;  
	if (len > MAXSTRLEN) 	
		return ERROR;	//串长度大于给定长度,发生截断
	else	
		while (i <= len)	S[i++] = ch[k++];						 
	S[0] = len;	
	return OK;
}

/*获取子串*/
Status SubString(SString &Sub,SString &S,int pos,int len)
{
	int i = 1;
	if ((pos<1) || (pos>S[0]) || (len<0) || len>(S[0]-pos+1))
		return ERROR;
	while (i <= len){
		Sub[i] = S[pos+i-1];
		i++;
	}//while
	Sub[0] = len;
	return OK;
}

/*串比较*/ 
bool StrCompare(SString &S,SString &T) 
{
	int i = 1;
	int j = 1;
	while (i<=S[0] && j<=T[0]){
		if (S[i++] != T[j++])
			return false;
	}//while		
	return true; 	//相等
}

/*输出串*/
Status outputStr(SString &S)
{
	int i;
	for(i=1; i<=S[0]; i++)
		printf("%c",S[i]);
	return OK;
}

/*删除*/
Status delString(SString &S,SString &T)
{
	SString Sub;
	int i = 1;
	int j;
	while (i <= S[0]-T[0]+1){
		SubString(Sub,S,i,T[0]); //从S的第i个位置获取一个T[0]长度的子串 
		if (!StrCompare(Sub,T))	 
			i++;
		else{
			for(j=i; j <= S[0]-T[0]; j++){
				S[j] = S[j+T[0]];
			}
			S[0] = S[0] - T[0];
		}
	}//while
	return OK;
}

int main()
{
	SString S,T;	    
	StrAssign(S);
	StrAssign(T);
	delString(S,T); 
	outputStr(S);
	return 0;
}

 

本文章仅供学习和参考!

欢迎交流~

Guess you like

Origin blog.csdn.net/m0_58489132/article/details/121189534