标题:自定义函数delspace是怎么做到删除空格的
只看楼主
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
结帖率:100%
 问题点数:0 回复次数:10 
自定义函数delspace是怎么做到删除空格的
程序代码:
#include <stdio.h>

void delspace(char *p1);

int main(void)
{
    char str[81];

 do

 {
  puts("input a string:");
  gets(str);
  delspace(str);
  puts(str);
  puts("input any char except q to go on.");
  gets(str);

 }

 while(*str != 'q');

 puts("Quit.");
    return 0;
}

void delspace(char *p1)
{

 char *p2;

 while (*p1 != '\0' )

 {
  if (*p1 == ' ')
  {
   p2 = p1;
   while(*p2 != '\0')
   {
    *p2 = *(p2+1);
    p2++;
   }
   p1--; //抵消下面的p1++
  }
  p1++;

 }
}

有谁能跟我解释一下delspace函数中到底是怎么运行的?每一行代码都懂,放在一起就没办法理解。
搜索更多相关主题的帖子: 函数 char str puts while 
2018-02-04 18:25
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
while(*p2 != '\0')
   {
    *p2 = *(p2+1);
    p2++;
   }
前面的等于后面的
这段代码翻译过来就是
while(temp[i] != '\0') {
    temp[i] = temp[i + 1];
    i++;
}
temp 就是 p2 指向的那个数组

[此贴子已经被作者于2018-2-4 19:30编辑过]

2018-02-04 19:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
if (*p1 == ' ')
  {
   p2 = p1;
   while(*p2 != '\0')
   {
    *p2 = *(p2+1);
    p2++;
   }
   p1--; //抵消下面的p1++
  }
不用每次遇到空格都将之后的所有字符往前搬,只将之后不是空格的字符往前搬就可以。
2018-02-05 09:14
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
得分:0 
回复 3楼 吹水佬
为什么我感觉程序对*p2进行操作   但并未把*P2的操作产地给*P1  所以输出的结果不变呢  大婶
2018-02-05 16:03
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用li384022在2018-2-5 16:03:19的发言:

为什么我感觉程序对*p2进行操作   但并未把*P2的操作产地给*P1  所以输出的结果不变呢  大婶

当p1每次遇到空格时,p2用作将p1之后的所有字符往前搬。这样,如果p1之后有好多空格,就会做好多重复性动作。
2018-02-05 19:32
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
程序代码:
#include <stdio.h>

void delspace(char *p1);

int main(void)
{
    char str[81];

 do

 {
  puts("input a string:");
  gets(str);
  delspace(str);
  puts(str);
  puts("input any char except q to go on.");
  gets(str);

 }

 while(*str != 'q');

 puts("Quit.");
    return 0;
}

void delspace(char *p1)
{

 char *p2;

 for (p2=p1;*p1 != '\0';p1++ )

 {
  if (*p1 != ' ')
  {
   *p2 = *p1;
    p2++;
   }
  }
  *p2='\0';

 }

2018-02-06 14:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

void delspace( char* s );

int main( void )
{
    for( ; ; )
    {
        char str[81];
        puts( "input a string(\"q\" to quit):" );
        if( !fgets(str,sizeof(str),stdin) || strcmp(str,"q\n")==0 )
            break;

        delspace( str );
        printf( "%s", str );
    }
}

void delspace( char* s )
{
    char* p;
    for( p=s; *s; ++s )
        if( *s != ' ' )
            *p++ = *s;
    *p = '\0';
}
2018-02-06 14:50
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
得分:0 
while(*p2 != '\0')
   {
    *p2 = *(p2+1);
  把空格后的字符搬到前面来。
2018-02-07 10:00
Jeyyion_han
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:207
专家分:301
注 册:2018-1-22
得分:0 
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int delete_space(char str);
int main()
{
    char buf[1024];
    printf("please input the string:\n");
    scanf("%s",buf);
    delete_space(buf);
    printf("After delete space:\n");
    printf("%s",buf);
    getchar();
    system("pause");
    return 0;
}
int delete_space(char str)
{
    char *s=str;
    while(*s!='\0')
    {
        if(*s==' ') {*str++=*s}
        s++;        
    }
    *str='\n';
    return 0;
}


你试试 我用的是VS2017
2018-02-11 15:03
Jeyyion_han
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:207
专家分:301
注 册:2018-1-22
得分:0 
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int delete_space(char str);
int main()
{
    char buf[1024];
    printf("please input the string:\n");
    scanf("%s",buf);
    delete_space(buf);
    printf("After delete space:\n");
    printf("%s",buf);
    getchar();
    system("pause");
    return 0;
}
int delete_space(char str)
{
    char *s=str;
    while(*s!='\0')
    {
        if(*s==' ') {*str++=*s}
        s++;        
    }
    *str='\n';
    return 0;
}


你试试 我用的是VS2017
2018-02-11 15:03



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




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

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