作者:金鸽
欢迎访问 sinodragon21.cublog.cn
源代码如下:
#include<fstream>
#include<iostream>
#include<map>
using namespace std;
int main()
{
ifstream ifs;
ifs.open("input.txt");
map<char, int> datamap;
map<char,int>::iterator iter;
char ch = '\0';
while(!ifs.eof())
{
//cout << ch;
ifs.get(ch);
if('\n' == ch) continue;
if(datamap.end() != datamap.find(ch))
{
datamap[ch] ++;
}
else
{
datamap.insert(pair<char, int>(ch, 1));
}
}
int mincnt = 65535;
char minkey = '\n';
for(iter = datamap.begin(); iter != datamap.end(); iter++)
{
cout << "key = " << iter->first << "; cnt = " << iter->second << endl;
if(mincnt > iter->second)
{
minkey = iter->first;
mincnt = iter->second;
}
}
cout << endl << "=========================" << endl;
cout << "rare character = " << minkey << "; cnt = " << mincnt << endl;
ifs.close();
system("PAUSE");
return 0;
}
|
待解决的问题:
1、这种排序得到的'最小出现次数'字符只能是一个,如果有多个出现频率相同的字符,就有问题了。
2、输出结果:
key = !; cnt = 6079
key = #; cnt = 6115
key = $; cnt = 6046
key = %; cnt = 6104
key = &; cnt = 6043
key = (; cnt = 6154
key = ); cnt = 6186
key = *; cnt = 6035
key = +; cnt = 6066
key = @; cnt = 6157
key = [; cnt = 6108
key = ]; cnt = 6152
key = ^; cnt = 6030
key = _; cnt = 6112
key = a; cnt = 1
key = e; cnt = 1
key = i; cnt = 1
key = l; cnt = 1
key = q; cnt = 1
key = t; cnt = 1
key = u; cnt = 1
key = y; cnt = 1
key = {; cnt = 6046
key = }; cnt = 6105
=========================
rare character = a; cnt = 1
请按任意键继续. . .
|
结果中 “a, e, i, l, q, t, u, y” 出现次数最少,
可如何列出这8个字符的所有排列组合?从中找到有意义的 字符串?
附:google到的Python解决方案
1. import re
2. import urllib
3. import string
4.
5. # 使用urllib模块读取页面源代码
6. sock = urllib.urlopen("")
7. source = sock.read()
8. sock.close()
9.
10. # 标志re.S表示在正则表达式中点(.)可以匹配任意字符,包括换行符
11. data = re.findall(r'', source, re.S)
12. charList = re.findall(r'([a-zA-Z])', data[1], 16)
13.
14. # 使用string模块将list转为字符串打印
15. print string.join(charList)
|
附:google到的permutation of string in C++
// This program finds permutations using a recursive method
// modified Dev C++ from a wonderful article at:
//
#include<iostream>
#include<cstring>
using namespace std;
void char_permutation(char str[],char append[])
{
int length = strlen(str);
if (length)
{
for(int i=0;i<length;++i)
{
char* str1 = new char[length+1];
int cnt;
int cnt2;
for(cnt=0,cnt2=0; cnt<length; ++cnt,++cnt2)
{
if (cnt == i)
{
str1[cnt] = str[++cnt2];
continue;
}
else
str1[cnt] = str[cnt2];
}
str1[cnt] = '\0';
int alength = strlen(append);
char* append1 = new char [alength+2];
strncpy(append1,append,alength);
append1[alength] = str[i];
append1[alength+1] = '\0';
char_permutation(str1,append1);
delete []str1;
delete []append1;
}
}
else
{
cout << append << endl;
}
}
int main()
{
char str[] = "aeilqtuy"; // shows a little humor
char append[] = "\0";
cout << "Original = " << str << endl;
char_permutation(str,append);
cout << "Done ........" << endl;
cin.get(); // wait
return 0;
}
|
使用C++的STL算法
// permutations
// Dev C++
#include <iostream>
#include <algorithm> // next_permutation() via stl_algo.h
#include <vector> // stl vector header
#include <iterator> // ostream_iterator
#include <stdlib.h> // system()
using namespace std;
int main()
{
vector<char> iV; // char型可以替换为其他类型 比如int
iV.push_back('a');
iV.push_back('e');
iV.push_back('i');
iV.push_back('l');
iV.push_back('q');
iV.push_back('t');
iV.push_back('u');
iV.push_back('y');
// display original
cout << "original number:\n";
copy(iV.begin(),iV.end(),ostream_iterator<char>(cout,"")); // char型可以替换为其他类型 比如int
cout << endl;
cout << "permutations:\n";
// loop until all permutations are generated and displayed
// does not display original number
while (next_permutation(iV.begin(), iV.end()))
{
copy(iV.begin(),iV.end(),ostream_iterator<char>(cout,"")); // char型可以替换为其他类型 比如int
cout << endl;
}
system("PAUSE");
return 0;
}
|
阅读(1054) | 评论(0) | 转发(0) |