今后,日常学习栏目中将专注于新知识本身的探讨,辅助练习题目如果关联不大就会放在基础练习中。
题意:要你找出这样的单词,单词里面的字母不区分大小写,然后字母重排之后只出现一次的单词,找出之后,还是输入的样子以字典序输出
读了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; }
原文地址:http://blog.csdn.net/ametake/article/details/43700867