64,637
社区成员
发帖
与我相关
我的任务
分享
#include<fstream>
#include<locale>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<char> oneword;//存放已统计的每个汉字的vector,全局变量
vector<int> fre; //代表每一个汉字的输入频率的vector,全局变量
void quickSort(int s[], int l, int r)
{
if (l< r)
{
int i = l, j = r, x = s[l];
char p[2];
p[0] = oneword[l*2];
p[1] = oneword[l*2+1];
while (i < j)
{
while(i < j && s[j]>= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
oneword[(i-1)*2] = oneword[j*2];
oneword[(i-1)*2+1] = oneword[j*2+1];
while(i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
oneword[(j+1)*2] = oneword[i*2];
oneword[(j+1)*2+1] = oneword[i*2+1];
}
s[i] = x;
oneword[i*2] = p[0];
oneword[i*2+1] = p[1];
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}
int main()
{
fstream file;
string str; //文件内容存到的目标字符串 str
unsigned char n[1];
string gstr; //临时变量,用来读入文件
int xx; //xx记录它在oneword数组中的位置
int i,j; //用来计数的变量
file.open("Ci.txt",ios::in|ios::out);
do{
str = str + gstr;
file>>gstr;
}
while(!file.eof());
file.close(); //关闭文件
int length = str.length(); //str的总长度
cout<<str<<endl;
cout<<length;
for(i=0;i<length;i=i+2)
{
n[0]=str[i];
if(n[0] >= 0xB0 && n[0] <= 0xF7) //是汉字字符
{
bool exist;
exist = false;
for(j=0;j<oneword.size();j=j+2)
{
if(oneword[j] == str[i] && oneword[j+1] == str[i+1])
{xx = j;
exist = true;
break;
}
}
if(exist) //已经存在于oneword中
{
fre[xx/2]++; //相应 计数 +1
}
else //还未存在于oneword之中
{
oneword.push_back(str[i]);
oneword.push_back(str[i+1]);
fre.push_back(1);
}
}
}
int *fre1 = new int[fre.size()]; //建立一个名为fre1的int型数组,数据与fre完全相同。为了使用现有函数对fre进行快速排序。
for(i=0;i<fre.size();i++)
{
fre1[i] = fre[i];
}
quickSort(fre1, 0, fre.size()-1); //快速排序函数调用
fstream writefile;
writefile.open("result.txt",ios::out);
for(i=0;i<oneword.size();i=i+2) //将oneword和fre中的数据一一输出到result.txt之中
{
char temp1[3];
temp1[0] = oneword[i];
temp1[1] = oneword[i+1];
temp1[2] = '\0';
writefile<<temp1<<" ";
writefile<<fre1[i/2];
writefile<<endl;
}
writefile.close();
writefile.clear();
return 0;
}
#include <vector>
#include <algorithm>
struct DATA { int i; char c[2]; };
int main() {
std::vector<DATA> a = {
xxxxxxxxxxxxxx
};
std::sort(a.begin(), a.end(), [](const DATA& a, const DATA& b) {
return a.i > b.i;
});
}