想写一个函数 把字符串中的所有空格去掉 并且再返回该字符串 急等

#include<stdio.h>
#include<string.h>
char[] cnn(char ch[]){
int i,j,k,t,flag=0;
for(i=0;i<strlen(ch);i++)
{
if(ch[i]==' '&&flag==0)
{
flag = 1;
j=i;
}
else
{
if(flag==1&&ch[i]!=' ')
{
k=i;
for(t=j;t<strlen(ch)-k+j;t++)
{
ch[t]=ch[i];
i++;
}
ch[t]='\0';
i=j;
flag=0;
}
else
{
if(i==strlen(ch)-1)
{
ch[j]='\0';
}
}
}
}
return ch;
}

int main()
{

return 0;
}

可以这么写,不需要推箱子,那只是一种算法,比较麻烦而且容易出错,也是写个函数,需要时调用就可以了
#include<stdio.h>
#include<string.h>
char* cnn(char* ch)
{
int count = strlen(ch);
char* sh = new char[count];
int i, j;
for(i=0,j=0; i<count; i++)
{
if(ch[i]!=' ')
{
sh[j] = ch[i];
j++;
}
}
sh[j]='\0';
return sh;
}

int main()
{
char* ch = "adfsdf dsf adf";
ch = cnn(ch);
printf(ch);
printf("\n");
return 0;
}追问

大哥 还是有问题 纠结中... ...
刚套用 空格后的字符串就被截掉了
http://hi.baidu.com/v_xxy/blog/item/3766aef4b106b8fa7709d7e2.html

追答

你程序我刚看了
问题出现在
scanf("%s",&nl);这个上 这个是读取你输入的字符串 直到遇到 回车 或者空格 为止的
所以你输入 asdf sdfsd saf 这是其实 nl只获得了 asdf 而后面的就没了
所以你之后调用我写的那个函数 nll=cnn(nl); 传进去的只是 asdf 后面的自然就没有了

追问

gets()?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-26
直接再开一个字符串来保存第一个字符串中非空格字符
第2个回答  2011-03-26
#include<stdio.h>
#include<string.h>
int main()
{ char str[1000];
int i, j=-1,n;
gets(str);
n=strlen(str);
for(i=0;i<n;i++)
if(str[i]!=' ')
str[++j]=str[i];
str[j+1]='\0';
puts(str);
return 0;
}追问

我是想写一个独立函数 然后在主函数中调用

追答


#include
#include
void f()
{ char str[1000];
int i, j=-1,n;
gets(str);
n=strlen(str);
for(i=0;i<n;i++)
if(str[i]!=' ')
str[++j]=str[i];
str[j+1]='\0';
puts(str);
}
int main()
{ f();
return 0;
}

追问

老大 你能看看我的那段代码吗 其实我是需要一个返回字符串

追答

知道你的意思了
你是想打一个一个进去 然或再判断 就好 推箱子一样 一个一个的推进去吧
这种算法很容易出错的,但可以练练逻辑

追问

其实就是一个箱子操作 我写一个函数 专门接收字符串 负责把字符串中的空格全都去掉 再把整理好后的字符串返回出去

追答

//我试了你的程序 你中间只隔一个没事 要是隔很多就会 帮你改了一点点 就出错在结尾 结得不好
#include
#include
void cnn()
{ char ch[1000];
gets(ch);
int i,j,k,t,flag=0;
for(i=0;i<strlen(ch);i++)
{
if(ch[i]==' '&&flag==0)
{
flag = 1;
j=i;
}
else
{
if(flag==1&&ch[i]!=' ')
{
k=i;
for(t=j;t<strlen(ch)-k+j;t++)
{
ch[t]=ch[i];
i++;
}
ch[t]='\0';
i=j;
flag=0;
}

}
}
ch[i]='\0';
puts(ch);
}
int main()
{
cnn();
return 0;
}

相似回答