C语言程序问题 用指针将字符串中的空格删除

#include<stdio.h>
fun(char * str)
{
char * p=str;
int i=0;
while((*p)!=0)
if((*p)!=' ')
{
str[i++]=*p;
p++;
}
str[i]=0;
}

main()
{
char str[100];
printf("Input a string:");
gets(str);
puts(str);
fun(str); //为什么这个函数不能执行 //为什么这个函数不能执行
printf("str:%s",str);
return 0;
}

将p++; 这一句从if子句中移出来,不管if条件是真是假,都要执行它。
#include<stdio.h>
fun(char * str)
{
char * p=str;
int i=0;
while((*p)!=0)
{ if((*p)!=' ')
str[i++]=*p;
p++; //将这一句从if子句中移出来,不管if条件是真是假,都要执行它。

}
str[i]=0;
}

main()
{
char str[100];
printf("Input a string:");
gets(str);
puts(str);
fun(str);
printf("str:%s",str);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-16

做一个for循环,将字符串逐字自己向自己拷贝,但遇到空格时跳过即可。举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
char str[]="Moonlight is in front of my bed.";
    int i,j;
    for(j=i=0;str[i];i++)
        if(str[i]!=' ')//不是' '则拷贝,否则跳过
            str[j++]=str[i];
    str[j]='\0';
    printf("%s\n",str);
    return 0;
}

第2个回答  2012-03-17
//本程序执行OK , 请读者在写程序的时候要注意 括号的匹配.
// 否则很难查 语名的作用域.
// 输入 "AA BB  CCC DDD"
// 输出 "AABBCCCDDD"

#include<stdio.h>
int fun(char * str)
{
char * p=str;
int i=0;
while( (*p) != 0 ){
if((*p) != ' '){
str[i++]=*p;
}
p++;
}
str[i]=0;
}

int main()
{
char str[100] = "A AA BB CC DDD";
printf("Input a string:");
/*gets(str);*/
puts(str);
fun(str);
printf("\nstr:[%s]\n",str);
return 0;
}
第3个回答  2012-03-17
p++; 必须将这一句从if子句中移出来,因为赋值的时间偶是一个借一个的,不管条件成不成立,p的数字都应该往下读取
相似回答