stl新手练习

Most crossword puzzle fans are used to anagrams — groups of words with the same letters in different orders — for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this attribute, no matter how you rearrange their letters, you cannot form another word. Such words are called ananagrams, an example is QUIZ. Obviously such definitions depend on the domain within which we are working; you might think that ATHENE is an ananagram, whereas any chemist would quickly produce ETHANE. One possible domain would be the entire English language, but this could lead to some problems. One could restrict the domain to, say, Music, in which case SCALE becomes a relative ananagram (LACES is not in the same domain) but NOTE is not since it can produce TONE. Write a program that will read in the dictionary of a restricted domain and determine the relative ananagrams. Note that single letter words are, ipso facto, relative ananagrams since they cannot be “rearranged” at all. The dictionary will contain no more than 1000 words.

Input

Input will consist of a series of lines. No line will be more than 80 characters long, but may contain any number of words. Words consist of up to 20 upper and/or lower case letters, and will not be broken across lines. Spaces may appear freely around words, and at least one space separates multiple words on the same line. Note that words that contain the same letters but of differing case are considered to be anagrams of each other, thus ‘tIeD’ and ‘EdiT’ are anagrams. The file will be terminated by a line consisting of a single ‘#’.

Output

Output will consist of a series of lines. Each line will consist of a single word that is a relative ananagram in the input dictionary. Words must be output in lexicographic (case-sensitive) order. There will always be at least one relative ananagram.

Sample Input

ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drIed noel dire Disk mace Rob dries #

Sample Output

Disk NotE derail drIed eye ladder soon

 

大意就是把那些字母一样的去掉,然后按字典序输出,其中需要将字符串中的字符转换为大写或小写,在我写的代码中我转换为了小写,在这道题我依然用到了set,利用set本身按从小到大的特点,符合了字典序,将存入set中的字符串输出,代码:

#include<cstdio>
#include<set>
#include<algorithm>
#include<iostream>
#include<cctype>
#include<string>
using namespace std;
set<string>s;
string str1[10000],str2[10000],str3[10000],str4[10000];  //str1是原本输入的保留,str2转小写用,str3是检索是否同一单词用,                                                                                              str4是用于防止多个比如三个出现 如:came mace eacm等
int main()
{
int a=1,l[3]={2,3,5};                 
set<string>::iterator iter;             //迭代器,用来连接set
while(cin>>str1[a])
{
    if(str1[a]=="#") break;        //输入#时停止
   str2[a]=str1[a];                     

    int c=str2[a].size();
    while(c)                       //将字符串转为小写
    {
        if(str2[a][c-1]>='A'&&str1[a][c-1]<='Z')  str2[a][c-1]=str2[a][c-1]+32;
        c--;
    }
    str3[a]=str2[a];
    str4[a]=str2[a];
    for(int b=1;b<a;++b)
{ int e=0;
    for(int d=0;d<str1[a].size();d++)
    {
        if(str1[b].size()>str1[a].size()||str1[a].size()>str1[b].size()) break;       //如果字母相同顺序不同那么长度一定相同,排除长度                                                                                                                          不同的情况

        if(str3[b][d]==str2[a][e]) {e++;str3[b][d]='*';d=-1;}         //如果找到相同字母,d一定等于-1,因为有个d++,这次循环后会                                                                                                        +1,下次循环从d为0开始

    }
    if(e==str1[a].size()) {str4[a]="*";str4[b]="*";}                //确保一样的让str4为*,一定双引号,因为是字符串
str3[b]=str2[b]; 
}
a++;

}
for(int b=1;b<=a-1;++b)
{
    if(str4[b]!="*") s.insert(str1[b]);              //如果str4不是*,就把str1放到set容器里
}
iter=s.begin();
for(int b=0;b<s.size();++b)
{
    cout<<*iter<<endl;                   //输出set中的元素
    iter++;
}
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++ STL(标准模板库)是一种强大的C++编程技术,它提供了许多有用的容器类、算法和迭代器来帮助程序员更轻松地编写高效的代码。 如果您正在学习C++编程,或者想要深入了解STL的工作原理,那么C++ STL教程是您的理想选择! C++ STL教程提供了一个全面的STL教程,涵盖了STL的各个方面,包括容器类、算法、迭代器和其他一些常用的STL功能。这个教程适合新手C++程序员和有经验的程序员,因为它从最基本的开始,逐步深入,并且提供了许多示例和代码片段来帮助人们理解不同的概念。 如果您想下载C++ STL教程的PDF版本,您可以通过搜索引擎找到几个网站提供下载。在下载之前,确保您选择的PDF教程是最新的版本,因为STL在不断地更新和改进。 需要注意的是,C++ STL教程PDF只是一种学习工具。 您应该通过亲身体验来练习和理解STL的概念和功能。请尝试编写自己的代码,并利用在线资源和社区来解决任何可能的问题或疑问。最终,您将练就出一双擅长利用C++ STL的手! ### 回答2: STL(Standard Template Library,标准模板库)是C++中非常重要的一部分,它提供了许多数据结构和算法,用于快速编写高效率的程序。如果您想要深入学习STL,那么我们强烈推荐您下载一份相关的STL教程PDF。 STL教程PDF汇集了许多关于STL的知识点,从基础概念到高级应用,全方位地讲解了STL的内容。通过学习STL教程PDF,您可以更好地掌握STL的使用方法和原理,提高程序设计的效率和质量。 同时,STL教程PDF中也包含了许多实用的编程案例,可以帮助读者更好地理解STL的使用,更加深入地了解C++语言。所以,无论您是初学者还是有一定经验的程序员,都非常适合使用STL教程PDF进行学习。 最后,我们建议您通过网络搜索引擎进行STL教程PDF的下载,或者在相关社区群组中寻找资源下载。我们相信,通过学习STL教程PDF,您一定可以得到更好的编程体验,让您的程序设计更加精准高效! ### 回答3: c stl教程 pdf下载是一种获取C++编程知识的方法。C++是一种非常强大的编程语言,STL是C++的一部分,它提供了许多常用数据结构和算法的实现。想要提高自己的编程技能,阅读相关的资料是很重要的。因此,c stl教程 pdf下载可以帮助您更好地理解C++和STL的使用。 在c stl教程 pdf中,你会得到很多非常有用的信息和技巧,包括如何使用STL容器(如vector、list、set、map等)以及STL算法(如排序、查找、合并、拷贝等)。此外,你还可以学习如何使用迭代器这种重要的概念,以及如何自己实现STL容器和算法。对于想要在自己的代码中使用STL来提高效率和减少编写代码量的开发人员来说,这些知识都非常重要。 最后,想要通过c stl教程 pdf来提高自己的编程能力,还需要多加实践。阅读资料可以帮助你理解概念和技巧,但只有亲自尝试才能真正掌握它们。因此,在学习过程中要多写代码,多做一些练习和项目,这样才能更好地理解和应用所学知识,提高自己的技能水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值