您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言压缩字符串(删除多余空格)

时间:01-03来源:作者:点击数:

下面的代码将使用两种方法删除字符串中的多余空格,如果两个字符之间的空格数目大于 1,那么只保留一个空格,否则不做处理。

由这个例子可以联想到代码的压缩,删除空格是压缩代码的第一步。

#include <stdio.h>
#define MAXBUFF 128
int getline(char line[], int nmax);
int compact1(char line[]);
int compact2(char line[]);
int main(void) {
    char buffer1[MAXBUFF];
    char buffer2[MAXBUFF];
    int len;
    len = getline(buffer1, MAXBUFF);
    printf("You entered : %s\n", buffer1);
    strcpy(buffer2,buffer1);
    printf("Which is : %s\n", buffer2);
    len=compact1(buffer1);
    printf("compact1: len=%d,  %s\n",len, buffer1);
    len=compact2(buffer2);
    printf("compact2: len=%d,  %s\n",len, buffer2);
}
// 输入一行最大长度为 nmax 的字符串,并返回其长度
int getline(char line[], int nmax)
{
    int len;
    char c;
    len = 0;
    printf("Enter a string [CR to exit]: ");
    while(((c=getchar())!='\n') && len<nmax-1)
        line[len++]=c;
    line[len]='\0';
    return len;
}
// 将多个连续空格替换为一个空格,并返回替换后的字符串的长度
int compact1(char line[])
{
    int cursor=0;  // 即字符数组的当前下标
    int prevspace = 0;  // 如果上一个位置是字符串则返回true
    int lcv=0;
    if(line[cursor]=='\0')
        return 0;
    do{
        if((line[cursor]==' ')&&prevspace){
        // 如果一个空格前面还有一个空格,那么将后面的字符串左移一个位置
            for(lcv=cursor;line[lcv];lcv++)
            line[lcv]=line[lcv+1];
        }else
            prevspace=(line[cursor++]==' ');
    }while(line[cursor]);
    return cursor;
}
// 将多个连续空格替换为一个空格,并返回替换后的字符串的长度
int compact2(char line[])
{
    int cursor=0;  // 字符数组的当前下标
    int prevspace = 0;  // 如果上一个位置是字符串则返回true
    int lcv = 0;  // 将字符串复制到哪个位置
    do{
        if(!((line[cursor]==' ')&&prevspace)){
            line[lcv++]=line[cursor];
            prevspace=(line[cursor]==' ');
        }
    }while(line[cursor++]);
    return(lcv-1);  // 遇到 '\0' 返回 -1
}

可能的输出结果:

Enter a string [CR to exit]: 城东书院    的   网址    是:     http://www.cdsy.xyz/
You entered : 城东书院    的   网址    是:     http://www.cdsy.xyz/
 Which is : 城东书院    的   网址    是:     http://www.cdsy.xyz/
compact1: len=54, 城东书院 的 网址 是: http://www.cdsy.xyz/
compact2: len=54, 城东书院 的 网址 是: http://www.cdsy.xyz/
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门