编写函数fun,它的功能是:除了字符串前导和尾部的"#"号之外,将串中其他"#"号全部删除。

形参r已指向字符串中第一个字母,形参v已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为"####a#bc#def##g#... 形参r已指向字符串中第一个字母,形参v已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为"####a#bc#def##g#####",删除后,字符串中的内容则应当是"####abcdefg#####"。
请勿改动主函数main中的任何内容,仅在函数fun的花括号中填入所编写的若干语句,并添加必要的注释。
void fun(char s[ ], int r, int v )
{

}
谢谢 晚上就要考试了还有不会的
麻烦添加点注释好吗?我看不太懂,谢谢
展开
 我来答
花生and奶牛
2010-06-18 · 超过12用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
我理解你的r是指向了字符'a',v是指向字符'g'

void fun(char s[],int r,int v)
{
int pos = 0; //用来存放字符串的个数
int count = 0; //用来计算删除'#'的个数,已被循环所用;
while *(s+pos) != '\0') //此循环计算字符串的长度
{
pos++;
}
for (int i=r; i<=v-count; i++) //从字符串'a'的位置开始循环比较,
{ //循环到字符串'g'的位置,因为中间
if (s[i] == '#') //要删除'#'所以循环的次数也要改变
{
for (int j=i; j<pos-count; j++)//此循环就是删除两地之间的'#'
{ //进行依次后一个字符补替前
s[j] = s[j+1]; //一个字符
}
count ++; //删除的个数要进行更新
i--; //假如删除了'a'后面的'#'
} //从'b'开始后面的字符串就往
} //前移,'b'就占住了删除的'#'
} //i--就是为了下一次循环从'b'
//比较
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-06-17
展开全部
void fun(char s[ ], int r, int v )
{
int i=v,j,k;
while (s[r]=='#')
r++;
while (s[i]=='#')
i--;

while (r<i)
{
if (s[r]=='#') {
for (j=r; j<=i; j++) s[j]=s[j+1];
i--;
v--;
}
else r++;
}
s[v+1]='\0';
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式