首先推荐一个网址“http://blog.jobbole.com/83461/”,其中详细记载了C++的模板元编程
#include<iostream>
using namespace std;
struct Point{
int x,y;
Point(int x=0,int y=0):x(x),y(y){}
};
Point operator + (const Point &A,const Point &B){
return Point(A.x+B.x,A.y,B.y);
}
ostream& operator << (ostream &out,const Point &p){
out<<"("<<p.x<<","<<p.y<<")";
return out;
}//ostream表示输出流。。。
//其中的point表示该类型
//ostream表示的是cout这一操作
//该操作为重载运算符操作
template<typename T>
T sum(T *begi,T *en){
T *p=begi;
T ans=0;
for (T *p=begin; p!=end; p++)
ans=ans+*p;
return ans;
}//紫书模板P106
#include<iostream>
#include<string>
#include<set>
#include<sstream>
using namespace std;
struct str{
string s;
bool operator<(const str &s1) const{
return s.length()<s1.s.length();
}
};
set<str> dict;
string s,s2;
int main(){
while (cin>>s){
for (int i=0; s[i]; i++)
if (isalpha(s[i])) s[i]=tolower(s[i]);else s[i]=' ';
stringstream ss(s);
while (ss>>s2) dict.insert((str){s2});
}
for (set<str>::iterator i=dict.begin(); i!=dict.end(); i++)
cout<<*i<<endl;
return 0;
}//CE代码,打算向JS2XXX大佬请教
#include<iostream>
#include<string>
#include<set>
#include<sstream>
using namespace std;
set<string> dict;
string s,s2;
int main(){
while (cin>>s){
for (int i=0; s[i]; i++)
if (isalpha(s[i])) s[i]=tolower(s[i]);else s[i]=' ';
stringstream ss(s);
while (ss>>s2) dict.insert(s2);
}
for (set<string>::iterator i=dict.begin(); i!=dict.end(); i++)
cout<<*i<<endl;
return 0;
}
#include<iostream>
#include<string>
#include<cctype>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
map<string,int> cnt;
vector<string> words;
vector<string> ans;
string s;
inline string rep(string s){
string ans=s;
for (int i=0; ans[i]; i++) ans[i]=tolower(ans[i]);
sort(ans.begin(),ans.end());
return ans;
}
int main(){
while (cin>>s){
if (s[0]=='#') break;
words.push_back(s);
string r=rep(s);
if (!cnt.count(r)) cnt[r]=0;
cnt[r]++;
}
for (int i=0; i<words.size(); ++i)
if (cnt[rep(words[i])]==1) ans.push_back(words[i]);
sort(ans.begin(),ans.end());
for (int i=0; i<ans.size(); ++i)
cout<<ans[i]<<endl;
return 0;
}