如何删除字符串中的空格

一、字符串第二弹:两头堵模式

字符串问题中, 模拟实现strcpy,和strstr 是两大重点,现在介绍第三大重点,两头堵模式,即在形如" abcdefghijklmnopqrstuvwxyz "的字符串,去掉前后空格, 形成新的字符串,或是求出非空格的字符个数等,都需要用到两头堵模式;

二、举个例子:

对以下字符串," abcdefghijklmnopqrstuvwxyz "要求去掉空格形成新的字符串,并求出非字符个数;
1、while循环实现

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int isspace1(char p)//判断字符是否为空格
{
    if(p==' ')
    {
        return -1;//若是空格,则返回-1;
    }
    return 0;//不是空格返回0
}

int getstr(char *mybuf1,char *mybuf2)
{
    int ret =0;
    int count=0;
    char *p= mybuf1;//找一个新的指针,将原mybuf1的数据保存一份

    int i=0,j=0;
    if(mybuf1==NULL||mybuf2==NULL)//检验实参传过来的空间是否合法
    {
        ret=-1;
        return ret;
    }

    j=strlen(mybuf1)-1;

    while(isspace1(p[i]) && p[i] != '\0')///////////1////////
    {
        i++;
    }

    while(isspace1(p[j]) && j>0 )
    {
        j--;
    }/////////////2///////////
    count=j-i+1; //非空格字符的个数

    memcpy(mybuf2,mybuf1+i,count);//字符串拷贝函数,不拷贝'\0'

    mybuf2[count]='\0';//手动在最后一个字符后面加入字符串结束标志'\0'
    printf("count=%d\n",count);

    return 0;
}
//主调函数
void main()
{
    int ret=0;
    char *buf1="   abcdefghijklmnopqrstuvwxyz   ";

    char buf2[100];

    ret=getstr(buf1,buf2);
    if(ret!=0)//判断是否操作成功
    {
        printf("func getstr err:(ret!=0),%d\n",ret);
    }

    else{
        printf("新字符串为buf2:%s\n",buf2);  
    }
    system("pause ");
}

三、运行结果:

2、for循环实现,不要isspace()函数


#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int isspace1(char p)//判断字符是否为空格
{
    if(p==' ')
    {
        return -1;
    }
    return 0;
}

int getstr(char *mybuf1,char *mybuf2)
{
    int ret =0;
    int count=0;
    char *p= mybuf1;

    int i=0,j=0;

    if(mybuf1==NULL||mybuf2==NULL)
    {
        ret=-1;
        return ret;
    }

    j=strlen(mybuf1)-1;

    for(i=0;p[i]==' '&&p[i] != '\0'&&p[j]==' ' && j>0;i++,j--)
    {
        ;
    }
    count=j-i+1;
    memcpy(mybuf2,mybuf1+i,count);//字符串拷贝函数
    mybuf2[count]='\0';
    printf("count=%d\n",count);
    return 0;
}

void main()
{
    int ret=0;
    char *buf1="   abcdefghijklmnopqrstuvwxyz   ";

    char buf2[100];

    ret=getstr(buf1,buf2);
    if(ret!=0)
    {
        printf("func getstr err:(ret!=0),%d\n",ret);
    }

    else{
        printf("新字符串为buf2:%s\n",buf2);  
    }
    system("pause ");
}

2、运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值