字母重排

  输入一个字典(用***结尾),然后再输入若干单词。没输入一个单词w,都需要在字典中找出所有可以用w的字幕重排后得到的单词,并按照字典序从小到大的顺序在一行中输出,如果不存在,输出“:(”。单词间用空格隔开,且所有输入单词都由不超过6个小写字母组成。

样例输入:
tarp given score refund only trap work earn course *****
aptr asdfg
样例输出:
part tarp trap
:(

程序:

#include <iostream>
#include <cstring>
//#include <stdio.h>
#include <stdlib.h>
using namespace std; char word[][], sorted[][]; //字符比较函数
int cmpString(const void *a, const void *b)
{
return strcmp((char*)a, (char*)b);
} //字符串比较函数
int cmpChar(const void *a, const void *b)
{
return *(char*)a - *(char*)b;
} int main()
{
int n = ;
while(true)
{
cin >> word[n];
if(word[n][] == '*') break;        //遇到结束标注就终止
n++;
}
qsort(word, n, sizeof(word[]), cmpString);            //给所有单词排序
for(int i = ; i < n; i++)
{
strcpy(sorted[i], word[i]);
qsort(sorted[i], strlen(sorted[i]), sizeof(char), cmpChar); //给每个单词排序
} char s[];
while(cin >> s)                            //读取字符串
{
qsort(s, strlen(s), sizeof(char), cmpChar);          //给输入单词排序
bool found = false;
for(int i = ; i < n; i++)
{
if(!strcmp(sorted[i], s))
{
found = true;
cout << word[i] << " ";                 //输出原始单词,而不是排序后的
}
}
if(!found) cout << ":(";
cout << endl;
}
return ;
}

Algorithm --> 字母重排的更多相关文章

  1. [code]字母重排

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  2. UVA 156 Ananagrams ---map

    题目链接 题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序进行排列( ...

  3. UVa 156 Ananagrams

    题意:给出一些单词,在这些单词里面找出不能通过字母重排得到的单词(判断的时候不用管大小写),然后按照字典序输出. 学习的紫书的map= = 将每一个单词标准化 先都转化为小写,再排序(即满足了题目中说 ...

  4. 反片语(map)

    输入一些单词,找出所有满足如下条件的单词: 该单词不能通过字母重排,得到输入文本中的另外一个单词. 在判断是否满足条件时,不区分大小写,但输出保留输入中的大小写,按字典序进行排列(所有大写字母在小写字 ...

  5. Problem D Ananagrams(map的使用)

    题目链接:Problem D 题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另一个单词.在判断是否满足条件时,字母不区分大小写. 但是输出时应保留原始大小写, ...

  6. STL语法——映射:map 反片语(Ananagrams,UVa 156)

    Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters i ...

  7. [Codeforces741D]Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths——dsu on tree

    题目链接: Codeforces741D 题目大意:给出一棵树,根为$1$,每条边有一个$a-v$的小写字母,求每个点子树中的一条最长的简单路径使得这条路径上的边上的字母重排后是一个回文串. 显然如果 ...

  8. UVa-156 Ananagrams 反片语【map】【vector】

    题目链接:https://vjudge.net/contest/211547#problem/D 题目大意: 输入一些单词,找出所有满足以下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一些 ...

  9. 反片语 UVA 156

    //该单词不能通过字母重排,得到输入文本中的另外一个单词.在判断是否满足条件时,字母部分大小写 #include<iostream> #include<vector> #inc ...

随机推荐

  1. 【转载】使用SDL播放YUV图像数据(转)

    SDL提供了针对YUV格式数据的直接写屏操作.废话不多说,直接上代码吧/** * file showyuv.c * author: rare * date: 2009/12/06 * email: d ...

  2. 图像处理------Fuzzy C Means的聚合算法

    Fuzzy C-Means聚合算法在图像分割(segmentation)和图像视觉处理中常常被用到聚合算法之 一本文是完全基于JAVA语言实现Fuzzy C-Means聚合算法,并可以运用到图像处理中 ...

  3. 使用VLC和live555MediaServer搭建RTSP服务器

    一.使用VLC搭建 服务端 1.打开"媒体--流"选项,如图所示:  2.点击"添加"按钮选择流媒体文件,然后点击"串流"按钮  3.点击& ...

  4. JavaScript获取当前值

    JavaScript获取当前值 1.说明        获取select下拉框中的选中的值以及文本值 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  5. JSP路径出现问题

    1.错误描述 2.错误原因 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  6. python中的迭代器&&生成器&&装饰器

    迭代器iterator 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外, ...

  7. TOJ 4120 Zombies VS Plants

    链接:http://acm.tju.edu.cn/toj/showp4120.html 4120.   Zombies VS Plants Time Limit: 1.0 Seconds   Memo ...

  8. 异常-----Template user.ftl not found

    freemarker 1.错误描述 java.io.FileNotFoundException: Template user.ftl not found. at freemarker.template ...

  9. Linux之安全应用

    一.关于iptables 定义:常见于linux系统下的应用层防火墙工具 二.Iptables规则原理和组成 1) Netfilter Netfilter是Linux操作系统核心层内部的一个数据包处理 ...

  10. CSS黄金三段--消除边框的影响

    以前常常因为padding.margin等影响了整个边框的大小,只能傻傻的算大小.现在的黄金三段真的是帮了大忙了,下面的代码放在CSS相应的内容中,就可以使得边框的大小就是你设置的width的属性值. ...