zoukankan      html  css  js  c++  java
  • 去除字符串中单词的多余空格

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

    /*************************************************************************
        > 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] = '';
    }
  • 相关阅读:
    Go语言的流程控制(条件,选择,控制,跳转,闭包)
    Go语言的map
    数据库-关系模型
    数据库的格式化模型(层次模型和网状模型)
    数据库-数据模型
    操作系统的功能与定义
    操作系统功能和定义
    操作系统应用程序
    密码学概论
    JAVA多线程提高四:多个线程之间共享数据的方式
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/3932547.html
Copyright © 2011-2022 走看看