C语言使用指针去除字符串中的空格

wuyidui 2015-10-06 07:17:46
char *fun1(char *ptr)
{
char *p,*q;
for(p=ptr;*p!='\0';p++)
{
q=p;
if(*q==' ')
{
while(*q!='\0')
{
*q=*(q+1);
q++;
}
}
}
return ptr;
}


假设char ptr[]="I am from shanghai";
输出:Iamfromshanghai

以上代码中三个指针:ptr,p,q,是如何操作的?烦请解释的详细些
...全文
2437 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzwgyfgpf 2015-10-07
  • 打赏
  • 举报
回复
这个程序效率太低了,遍历一次字符串去掉一个空格,总共要遍历sizeof(字符串)次
wuyidui 2015-10-07
  • 打赏
  • 举报
回复
谢谢各位,
我也是用的三楼同学的思路,不过是字符串先倒序,再各个单词倒序。

四楼中要另外开辟内存,如果数据量大的话就不太好吧。
q16552 2015-10-07
  • 打赏
  • 举报
回复
#include <ctype.h> int isspace(int ch);
paschen 2015-10-07
  • 打赏
  • 举报
回复
你那种方法挺麻烦,给个新的思路: 新建另一个字符数组,遍历你之前的字符数组,如果不是空格,就复制到新的数组中
二班的码农 2015-10-06
  • 打赏
  • 举报
回复
先将每个单词倒过来,即将“I am from shanghai”转换成“I ma morf iahgnahs”,再将整个字符串倒过来变成“shanghai from am I”
wuyidui 2015-10-06
  • 打赏
  • 举报
回复
char *fun1(char *ptr)
{
    char *p,*q;
    for(p=ptr;*p!='\0';)
    {
        q=p;
        if(*q==' ')
        {
            while(*q!='\0')
            {
                *q=*(q+1);
                q++;
            }
        }
        else  
            p++;

    }
    return ptr;
}
谢谢,改了一下,这样就可以了。 另外, 将“I am from shanghai”倒置为“shanghai from am I” 我看了一下别人的代码,不太明白它的算法思想,能帮忙解释一下吗?
char *fun2(char *src)
{
    char temp;
    char *start = src, *end = src, *ptr = src;

    while(*ptr++ != '\0')
    {
        if(*ptr == ' ' || *ptr == '\0')
        {
            end = ptr - 1;
            while(start < end)
            {
               temp = *start;
              *start = *end;
              *end = temp;
              start++;
              end--;
            }
            start = end = ptr + 1;
        }
    }

    start = src;
    end = ptr - 2;
    while(start < end)
    {
          temp = *start;
          *start = *end;
          *end = temp;
          start++;
          end--;
    }
    return src;
}
二班的码农 2015-10-06
  • 打赏
  • 举报
回复
用指针p去遍历字符串ptr中所有字符,当遇上空格时,用指针q通过字符串由后向前移一位来覆盖空格,不过这个算法有局限,当连续有两个空格时,就只能删除一个空格

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧