zoukankan      html  css  js  c++  java
  • 将字符串中单词经排序后输出

    思路

    先将字符串中的单词分割保存至二维数组中,再经排序后输出。水题,直接上代码了。

    代码

    /*************************************************************************
        > File Name: words_sort.c
        > Author: KrisChou
        > Mail:zhoujx0219@163.com 
        > Created Time: Sun 24 Aug 2014 08:41:42 PM CST
     ************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 128
    #define WORD_CNT 128
    #define WORD_LEN 256
    
    static int my_isspace(char c)
    {
        if(c == ' '|| c == '
    ' || c == '	' || c == 'v')
            return 1;
        else
            return 0;
    }
    
    static void word_show(char(*words)[WORD_LEN],int cnt)
    {
        int index;
        for(index = 0; index < cnt; index++)
        {
            printf("%-15s", words[index]);
        }
    }
    
    static void word_save(char *line, int bg, int end, char *dest)
    {
        int index,index_dest;
        for(index = bg,index_dest = 0; index <= end; index++,index_dest++)
        {
            dest[index_dest] = line[index];
        }
        dest[index_dest] = '';
    }
    
    static int word_split(char *line, char(*words)[WORD_LEN])
    {
        int bg,end;
        int word_cnt;
        bg = 0;
        word_cnt = 0;
        while(line[bg] != '')
        {
            while(my_isspace(line[bg]))
            {
                bg++;
            }
            if(line[bg] == '')
            {
                break;
            }
            end = bg;
            while(line[end] != '' && !my_isspace(line[end]))
            {
                end++;
            }
            word_save(line,bg,end-1,words[word_cnt++]);
            bg = end;
        }
        return word_cnt;
    }
    
    static void word_sort(char(*words)[WORD_LEN],int cnt)
    {
        int pos,index;
        char key[WORD_LEN];
        memset(key,0,WORD_LEN);
        for(pos = 1; pos < cnt; pos++)
        {
            strcpy(key,words[pos]);
            for(index = pos - 1; index >= 0; index--)
            {
                if(strcmp(key,words[index]) < 0)
                {
                    strcpy(words[index+1],words[index]);
                }else
                {
                    break;
                }
            }
            strcpy(words[index+1],key);
        }
    }
    
    int main(int argc, char *argv[])
    {
        char line[N];
        char arr[WORD_CNT][WORD_LEN];
        int word_cnt;
        while(fflush(stdin),gets(line) != NULL)
        {
            word_cnt = word_split(line,arr);
            word_show(arr,word_cnt);
            printf("
    ");
            word_sort(arr,word_cnt);
            word_show(arr,word_cnt);
            printf("
    ");
    
        }
        return 0;
    }

  • 相关阅读:
    蓄水池抽样(Reservoir Sampling )
    动态申请一个二维数组
    最大子段和问题分析和总结
    正则表达式语法
    正则表达式介绍
    小刘同学的第七十六篇博文
    小刘同学的第七十五篇博文
    小刘同学的第七十四篇博文
    小刘同学的第七十三篇博文
    小刘同学的第七十二篇博文
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/3933590.html
Copyright © 2011-2022 走看看