C语言编程题

完成函数intstrdel(char*s)的定义,它实现将指针s指向的字符串中所有空格字符删除,并统计所删除的空格字符的个数返回给主函数。编写主程序,验证strdel()... 完成函数 int strdel (char *s)的定义,它实现将指针s指向的字符串中所有空格字符删除,并统计所删除的空格字符的个数返回给主函数。编写主程序,验证strdel ()的有效性。
对于每个测试实例,输出分两行:
第一行输出删除所有空格之后的字符串;
第二行输出被删除空格的总数。
如输入ab c de
输出abcde
4
本人编写如下
#include<stdio.h>
char strdel(char *s)
{
int n=0,i,j;
for(i=0;*(s+i)!='\0';i++){
if(*(s+i)==' '){
for(j=i;*(s+j)!='\0';j++){
*(s+j)=*(s+j+1);
n++;
}
return n;
}
}
}
void main()
{
char a[80],*s;
int n,i;
gets(a);
for(i=0;a[i]!='\0';i++){
*(s+i)=a[i];
}
n=strdel(s);
for(i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
printf("\n%d",n);
}
然后运行不出 求帮助!谢~~~~
展开
 我来答
似夕水每
推荐于2016-02-16 · TA获得超过196个赞
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:94.2万
展开全部
#include<stdio.h> 
#include<string.h>
#include <stdlib.h> 
char strdel(char *s)

    char *p1=(char*)malloc(strlen(s));  //重新开辟s那么大 
                                     //的数组依次存放不是空格的数组元素
    int k = 0,i,n = 0;  
    for(i = 0; *(s+i) != '\0'; i++) 
 {
        if(*(s+i) != ' ') 
  { 
            *(p1+k) = *(s+i);  //不是空格的元素存入另一个数组中
             k++; 
        } 
        else 
            n++;//统计空格次数
   }
    *(p1+k)='\0';  //加上结束标志
    puts(p1); 
    return n;  

int main()

    char a[100]; 
 int n;
    char *s = a;  //将指针指向数组首地址,就不需要进行单个的赋值
                  //   只需要移动指针下标
    gets(a); 
    n = strdel(s);
 printf("%d\n",n);
    return  0; 
}

你的程序错误有两个地方,第一个地方就是数组元素给指针赋值方式错了。 另一个小地方就是删除空格后,没有将末尾加上结束符
更多追问追答
追问
char *p1=(char*)malloc(strlen(s));  //重新开辟s那么大 
//的数组依次存放不是空格的数组元素
请问这句能不能使用其他方法
我把它改为char *p;
p=s;
是不行的 但是你说的那种我还没学到 急
追答
第一次在主函数使用那种方法是可以的,因为你已经定义了数组的大小,如果在strdel函数中使用 你无法知道你要定义多大的数组
leichenfeng
2013-05-27 · TA获得超过756个赞
知道小有建树答主
回答量:425
采纳率:0%
帮助的人:473万
展开全部
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *p){
char *temp=(char*)malloc(strlen(p));
int k=0,i;
int num=0;
for(i=0;*(p+i)!='\0';i++){//用空间换时间,加强运行效率,比你的双循环好点

if(*(p+i)!=' '){
*(temp+k)=*(p+i);
     k++;

}
else
num++;//统计次数
}
*(temp+k)='\0';
puts(temp);
printf("删除了%d个空格\n",num);

}
int main(){
char a[100];
char *s=NULL;
gets(a);
s=(char *)malloc(strlen(a)+1);
strcpy(s,a);//直接用这个方法,不用一个字符一个的复制
fun(s);
   return  0;
}

你的错误是指南针使用错误没有为指针分配空间,要用malloc为s分配空间

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式