标题:从一个字符串中去除多余的空格(用指针描述)
只看楼主
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
结帖率:100%
 问题点数:0 回复次数:15 
从一个字符串中去除多余的空格(用指针描述)

/*

Name: 从一个字符串中去除多余的空格(用指针描述)

Copyright:

Author:

Date: 18-09-07 19:38

Description: 函数原形: void deblank(char string[])

功能:如果一个字符串有一个地方由一个或多个连续空格符组成,就把它们改为单个空格字符

出处:《c和指针》Page65No.7

Compiler:Dev-C++ 4.9.9.2

*/

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void deblank(char string[])

{

char *pstr,*_pstr,temp; //声明两个指针变量,和一个temp(用来暂时存储一个字符)

pstr=string; //psrt指向要处理的字符串

while(*pstr!=EOF) //如果不是字符串结尾则循环

{

if(*pstr==' ') //如果第一个下标变量的值是空格符

{

pstr++; //指向下一个下标变量

_pstr=pstr; //_pstr_pstr同步

if(*_pstr==' ') //如果下一个下标变量也是空格符

{

while(*_pstr!=EOF) //后面的数组元素整体向前移动一个位置

{

temp=*_pstr;

_pstr--;

*_pstr=temp;

_pstr++;

_pstr++;

}

_pstr=pstr; //_pstr指向原位置,然后返回if(*_pstr==' ')继续判断当前位置是否为空格符

}

}

else

pstr++; //如果不是空格则继续向下移动指针

}

}

int main(void)

{

char str[50],msg[]={"Input a string:"};

puts(msg);

gets(str);

deblank(str);

puts(str);

getch();

return 0;

}

这段代码有问题吗?怎么结果老是不对??

晕,一段代码弄到半夜,真郁闷。

2007919星期三 0:45:46

搜索更多相关主题的帖子: 指针 空格 字符 描述 
2007-09-22 20:05
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 

#include <stdio.h>
#include <conio.h>
#include <string.h>
void OOOO(char *o)
{
!(*o)?o:(OOOO(o+1),(*o==' ')?strcpy(o,o+1):o);
}
int main(void)
{
char OoOo[256];
printf("%s\n",(OOOO(gets(OoOo)),OoOo));
getch();
return 0;
}

这个,可以~~~~


偶学编程,也许本身就是一个错。。。
2007-09-22 20:17
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
通过.LS的强,我写了那么长用这么几句话就概括了,这本经书我取了

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2007-09-22 20:27
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 

其实那段代码实现的功能和你所要的有一定差距(我实现的是删除所有空格),你只要改一下里面的一个条件就可以了。。。


偶学编程,也许本身就是一个错。。。
2007-09-22 20:29
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
得分:0 

/* 其实很简单,不要搞的太复杂了 */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

char *killblank(char *str)
{
char *buf;
int i=0,j=0;
buf=(char*)malloc(strlen(str)+1);
while(i<strlen(str))
{
if(str[i]!=' ') /* str[i]不是空格,则赋值给buf*/
{
buf[j]=str[i];
j++;
i++;
}
else /* str[i]是空格 */
{
if(buf[j-1]!=' '&&j!=0)
{
buf[j]=str[i];
i++;
j++;
}
else
i++;
}
}
buf[j]='\0';
strcpy(str,buf);
free(buf);
return str;
}

int main()
{
char str[64];

printf("Enter a str:");
gets(str);

killblank(str);
printf("%s",str);
getch();
return 0;
}


只有想不到,没有做不到
2007-09-22 21:55
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
没一个是合格产品

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-22 22:04
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
老K,写个合格的看看~~~~~

偶学编程,也许本身就是一个错。。。
2007-09-22 22:06
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

要钱的.....


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-22 22:08
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
我晕,其实现在对混乱代码有点了解,也是从你上一段学来的。。。

很希望对混乱代码有更深入的体会。。。你再写一段让我学习学习~~~~

(我那一段,是我上次改写一个很早以前的代码。。。除了功能有点和LZ的不一样以外,我觉得没什么不合格的)

[此贴子已经被作者于2007-9-22 22:12:53编辑过]


偶学编程,也许本身就是一个错。。。
2007-09-22 22:11
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

在本版找标题 [ 有趣的代码 ]


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-22 22:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-172152-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.171175 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved