【基础练习】【模拟map练习】Uva156 - Ananagrams题解
2015-02-10 11:20
387 查看
今后,日常学习栏目中将专注于新知识本身的探讨,辅助练习题目如果关联不大就会放在基础练习中。
题意:要你找出这样的单词,单词里面的字母不区分大小写,然后字母重排之后只出现一次的单词,找出之后,还是输入的样子以字典序输出
读了ruka上的标程后,自己写了一遍,代码如下:
今后要养成写注释的习惯,可以在发稿时写,DEC C++中文注释复制过来全是乱码,英文注释又怕大家看不明白
题意:要你找出这样的单词,单词里面的字母不区分大小写,然后字母重排之后只出现一次的单词,找出之后,还是输入的样子以字典序输出
读了ruka上的标程后,自己写了一遍,代码如下:
#include<iostream> #include<cstdio> #include<string> #include<map> #include<vector> #include<cctype>//for tolower为了转小写引用的头文件,cctype用于处理字符 #include<algorithm> using namespace std; map<string,int> cnt;//定义映射 vector<string> words;//定义不定长数组 string change(string s){//将字符串标准化处理 for (int i=0;i<s.length();i++) s[i]=tolower(s[i]);//先转为小写 sort(s.begin(),s.end());//再排序,便于比较 return s; } int main(){ string s; while ((cin>>s)&&(s[0]!='#')){//shall we use scanf when referred to string?不知道stl的字符串能不能用scanf读入并检验 words.push_back(s);//原始字符串存入不定长数组words中 string temp=change(s);//标准化 cnt[temp]++;//由于初值为0,直接++即可 } vector<string> ans; for (int i=0;i<words.size();i++){ if (cnt[change(words[i])]==1) ans.push_back(words[i]);//如果该串只出现了一次,保存原串到不定长数组ans中 } sort(ans.begin(),ans.end());//ans排序 for (int i=0;i<ans.size();i++) cout<<ans[i]<<endl;//输出 return 0; }
今后要养成写注释的习惯,可以在发稿时写,DEC C++中文注释复制过来全是乱码,英文注释又怕大家看不明白
相关文章推荐
- 【基础练习】【模拟】Uva489 - Hangman Judge题解
- UVA 156 【map的使用】【字符串模拟】
- 【基础练习】【模拟】Uva133 - The Dole Queue题解
- 【基础练习】【字符串】【模拟】洛谷2614 计算器弹琴题解
- Ananagrams (uva 156,bnu 17295) map用法,单词标准化
- 【UVA】12504 - Updating a Dictionary(map,string,vector模拟)
- UVa 156 Ananagrams(STL,map)
- 会计基础模拟练习一(3)
- Java基础知识强化之IO流笔记53:IO流练习之 自定义类模拟BufferedReader的readLine()功能案例
- UVA - 11995 - I Can Guess the Data Structure! (基础数据结构练习!)
- UVa 156 map的使用
- UVA 156 Ananagrams 模拟+字符串处理
- 会计基础模拟练习2
- uva 11995 基础数据结构的模拟
- 【基础练习】【模拟】codevs1053 笨小猴题解
- UVA 156 Ananagrams 模拟+字符串处理
- 会计基础模拟练习一(2)
- 会计基础模拟练习一(1)
- UVa 156 Ananagrams(STL,map)
- UVA 156 Ananagrams (字符串模拟)