• 去除字符串中单词的多余空格


    题目很水,我想代码应该就是最好的注释,实现如下:

    /*************************************************************************
        > File Name: trim_space.c
        > Author: KrisChou
        > Mail:zhoujx0219@163.com 
        > Created Time: Sun 24 Aug 2014 10:03:33 AM CST
     ************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 128
    
    static int my_isspace(char c)
    {
        if(c == ' ' || c == '
    ' || c == '	' || c == 'v')
            return 1;
        else
            return 0;
    }
    
    static void trim_space(char *line)
    {
        int pre, work_index;
        pre = -1;
        work_index = 0;
        while(line[work_index] != '')
        {
            if(!my_isspace(line[work_index]))
            {
                line[++pre] = line[work_index++];
            }else if(pre != -1 && !my_isspace(line[pre]))
            {
                line[++pre] = line[work_index++];
            }else
            {
                work_index++;
            }
        }
        line[++pre] = '';
    }
    
    int main(int argc, char *argv[])
    {
        char line[N];
        memset(line,0,N);
        while(fflush(stdin),gets(line)!= NULL)
        {
            trim_space(line);
            puts(line);
        }
        return 0;
    }
    
    /* 关于输入输出的问题此处再强调一次,gets不会存储‘
    ’,并将最后一个‘
    ’换成‘’存储。
     * puts会将‘’变成‘
    ’输出。
     * gets是一个不安全函数,会输出直至遇到‘’为止。
     * fgets会存储‘
    ’,fputs输出时不会将‘’变成‘
    ’                                    */

    注意

    由于有人反应不理解,此处再解释下。实际上此去空格方法与快速排序的partition步骤类似。也运用了快慢指针。其中快指针用于遍历数列。将trim_space中的while循环写成以下形式,可能大家就能理解了。如下:

    static void trim_space(char *line)
    {
        int pre = -1;
        int work_index = 0;
        while( line[work_index] != '')
        {
            if(!my_isspace(line[work_index]))
            {
                line[++pre] = line[work_index++];
            }else
            {
                if(pre == -1 || my_isspace(line[pre]))
                {
                    work_index++;
                }else
                {
                    line[++pre] = line[work_index++];
                }
            }
        }
        line[++pre] = '';
    }
  • 相关阅读:
    颜色代码 #000~#FFF & DML案例设计
    SQLScript DML 创建 & 查询 & 序列(条件查询 日起查询 关联查询 子查询 分组查询 查询内容拼接 模糊查询)
    Java JDBC 连接数据库 Demo
    document的JavaScript一些用法
    dxSpreadSheet的报表demo-关于设计报表模板问题
    dxSpreadSheet的报表demo-关于设计报表模板的Datagroup问题
    TJSON的烦人的泄漏
    dxSpreadSheet的报表
    TDXSpreadSheet中自定义公式函数三大步骤
    SVN项目监视器的配置文件
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/3932547.html
Copyright © 2020-2023  润新知