程序中,规定输入的字符串中只包含字母和*号。编写函数fum,其功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。
    
    例如,字符串中的内容为”*****A*BC*DEF****”, 删除后字符串中的内容应当是 :”A*BC*DEF****”
    
    程序中,规定输入的字符串中只包含字母和*号。编写函数fum,其功能是:将字符串中的尾导*号全部删除,中间和前部的*号不删除。
    
    例如,字符串中的内容为”*****A*BC*DEF****”, 删除后字符串中的内容应当是 :”*****A*BC*DEF”
   
诸如此类的题大家见的应该不少,那么其实这种题的思路有很多的,这里介绍简单的一种
    删除前导*号
   
我们先来看第一种,删除前导*号,其他不删除,分为两步
- 
     
 找到前导的开始位置和结束位置
 
- 
     
 删除前导,保留其他
 
找到位置并不难以实现,那么删除,在C语言中,应该如何体现呢?
    
     其实C语言中最常用的数组删除法就是拿另一个变量遍历数组,通过改变下标的值来改变数组元素
    
   
    
     举个栗子
    
   
char str[] = "*****A*BC*DEF****";
int j = 0;
for (int i = 0; str[i]; i++)
{
	if (str[i]=='*')
	{
		str[j++] = str[i];
	}
}
str[j] = '\0';//为了输出时不输出乱码,手动放一个\0作为字符串结束标志.
    
     这样就实现了一个筛选操作,筛选这个字符串中的所有*号.这也就是一种删除了
    
   
那么其实前导删除也没有多大区别,接下来是代码
void del_FrontStar(char* str)
{
	int start = 0, index = 0;
	while (str[start] == '*')
	{
		start++;
	}
	while (str[start])
	{
		str[index] = str[start];
		start++;
		index++;
	}
	str[index] = '\0';
}
    删除尾导*号
   
    
     那么前导完了,尾导其实也差不多.只不过这里需要从后往前遍历.
    
   
void del_RearStar(char* str)
{
	int end = strlen(str) - 1;
	int index = 0;
	while (str[end]=='*')
	{
		end--;
	}
	for (int i = 0; i <= end; i++)
	{
		str[index++] = str[i];
	}
	str[index] = '\0';
}
    
     
      注意:这里i<=end是因为end在上面循环完后应该处于一个字母的下标位置,不能不遍历到它
     
    
   
    删除中间*号
   
    
     删除中间其实就需要从重新指定头和尾的位置,在此例中就是A前面是头,F后面是尾,那么其实就是我们前面删除前导和尾导的位置.
    
   
void del_CenterStar(char* str)
{
	int start = 0;
	int end = strlen(str) - 1;
	int index = 0;
	while (str[start]=='*')
	{
		start++;
	}
	while (str[end]=='*')
	{
		end--;
	}
	for (int i = start; i <= end; i++)
	{
		if(str[i]!='*')
        {
            str[index++] = str[i];
        }
	}
	str[index] = '\0';
}
    
     给定尾导*号的个数,将多余的删除
    
   
那么其实就是做一个判断,如果多余给定的个数,那么就删除到只剩给定个数数量的*号
void del_RearSpareStar(char* str,int n)
{
	int end = strlen(str) - 1;
	int count = 0;
	int index = 0;
	int delNum = n;
	while (str[end]=='*')
	{
		count++;
		end--;	
	}
	index = end + 1;
	if (count > n)
	{
		for (int i = index; delNum!=0; i++)
		{
			str[index++] = str[i];
			delNum--;
		}
	}
	
	str[index] = '\0';
} 
版权声明:本文为wfy17030212原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
