zoukankan      html  css  js  c++  java
  • 5.3.2 字母重排

    输入一个字典(用******结尾),然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。
    样例输入:
    tarp given score refund only trap work earn course pepper part 
    ******
    resco nfudre aptr sett oresuc
    样例输出:
    score
    refund
    part trap trap
    :(
    course

    [分析]
    如何判断两个单词是否可以通过重排得到呢?可以通过:把各个字母排序,然后直接比较即可。注意,在读入字典之后,首先把所有单词排序,然后再把字典中的每一个单词排序,最后在输入查询单词的时候,也首先将查询单词排序,然后再与字典中的单词做比较,如果相等就立刻输出。
    [注意]
    不管是把字符串中的各个字符排序还是把所有字符串排序,可以使用stdlib.h中的排序函数qsort 。使用库函数排序的代码量并不比用冒泡排序法小,但速度却快很多(原因是什么呢?)。函数qsort的原型如下:
    #include <cstdlib>
    void qsort( void* base, size_t num, size_t size, int(* comparator)(const void*, const void*) ); 
    详细用法可见:http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

     1 #include <stdio.h>
     2 #include <math.h>
     3 #include <string.h>
     4 #include <stdlib.h>
     5 #include <string.h>
     6 #include <iostream>
     7 #include <algorithm>
     8 using namespace std;
     9 char word[2000][10], target[2000][10];
    10 char array[10];
    11 bool cmp1(char a, char b){
    12     return a < b;
    13 }
    14 int main(){
    15     int i, j, k, t, n, m;
    16     bool flag;
    17     n = 1;
    18     while(1){
    19         scanf("%s",word[n]);
    20         if(word[n][0] == '*')   break;
    21         ++n;
    22     }
    23     for(i = 1; i < n; ++i){
    24         strcpy(target[i], word[i]);
    25     }
    26     for(i = 1; i < n; ++i){
    27         int len = strlen(word[i]);
    28         sort(word[i], word[i] + len, cmp1);
    29     }
    30     while(1){
    31         flag = false;
    32         scanf("%s",array);
    33         sort(array, array + strlen(array), cmp1);
    34         for(i = 1; i < n; ++i){
    35             if(strcmp(array, word[i]) == 0){
    36                 flag = true;
    37                 printf("%s ",target[i]);
    38             }
    39         }
    40         if(!flag)    printf(":(");
    41         printf("
    ");
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    【Life】 今天的思考
    【openpyxl】 关于 单元格背景色 的疑惑
    【xlwings】 wps 和 office 的excel creat_sheet区别
    [git] git error: unable to unlink old
    【python tkinter】对于窗口存在的认识
    【求教 探讨】python tkinter的messagebox
    [python]近日 用3种库 实现简单的窗口 的回顾~
    AE(After Effects)的简单使用——记一次模板套用的过程
    python3爬虫应用--爬取网易云音乐(两种办法)
    【KataDaily 191015】Sort the Gift Code
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/3815232.html
Copyright © 2011-2022 走看看