概述
题目大意:
输入一些单词,找出满足如下规则的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。判断时候字母不区分大小写,但是输出时候应该保留输入时候的大小写,并且按照字典序进行排序(大写字母排在小写字母前面)。
实现1:(用数组模拟)
#include<set>
#include<iostream>
#include<map>
#include<algorithm>
#include<cstring>
#define maxn 1000
using namespace std;
struct Str{
char low[100];//保存小写单词
char str[100];//原单词
bool flag;//标记是否满足条件
}s[maxn];
struct R{
char s[100];
}r[maxn];//保存满足条件的单词
int cmp(R a, R b)
{
return strcmp(a.s, b.s) < 0;
}
int main()
{
// freopen("C:\Users\zhangwei\Desktop\input.txt","r",stdin);
int count = 0;
while(cin >> s[count].str){
if(s[count].str[0] == '#')
break;
for(int i = 0; i < strlen(s[count].str); i++ ){
s[count].low[i] = tolower(s[count].str[i]);
}
sort(s[count].low, s[count].low+strlen(s[count].str));//关键
s[count].flag = true;
count++;
}
for(int i = 0; i < count; i++ ){//所有单词进行两两比较
for(int j = i+1; j < count; j++ ){
if(strcmp(s[i].low,s[j].low) == 0){
s[i].flag = false;
s[j].flag = false;
}
}
}
int cnt = 0;
for(int i = 0; i < count ; i++ ){
if(s[i].flag == true){//保存满足条件的单词
strcpy(r[cnt++].s, s[i].str);
}
}
sort(r, r+cnt, cmp);//按照字典序排序
for(int i = 0; i < cnt; i++ ){
cout << r[i].s <<endl;
}
return 0;
}
实现2:(用map,vector)
#include<set>
#include<iostream>
#include<map>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
string repr(const string &s)
{
string tmp = s;
for(int i = 0; i < s.length(); i++ ){
tmp[i] = tolower(s[i]);
}
sort(tmp.begin(),tmp.end());//关键
return tmp;
}
vector<string> words;
map<string,int> cnt;//键值对
int main()
{
// freopen("C:\Users\zhangwei\Desktop\input.txt","r",stdin);
string s;
string tmp;
while(cin >> s){
if(s[0] == '#')
break;
words.push_back(s);
tmp = repr(s);
++cnt[tmp];
}
vector<string> ans;
for(int i = 0; i < words.size(); i++ ){
if(cnt[repr(words[i])] == 1){
ans.push_back(words[i]);
}
}
vector<string>::iterator it;
sort(ans.begin(),ans.end());//默认字典序
for(it = ans.begin(); it != ans.end(); it++ ){
cout << *it <<endl;
}
return 0;
}
注意:(2)中用到了sort 对 string 类型数据进行排序 还有 对string 数据内部的字符串进行排序
不同于普通字符串sort(a,a+n) 而是sort(a.begin(), a.end());
最后
以上就是无限白云为你收集整理的习题 5-4 反片语(Ananagrams)UVa 156的全部内容,希望文章能够帮你解决习题 5-4 反片语(Ananagrams)UVa 156所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复