求高手!C++ 词频统计 不用map 要求指针数组啥的最好能帮我这救回来要求能显示每个单词个数能首字母排序
最好能在下面基础上改下面代码没有排序单词个数统计功能不用考虑单词的词态代码如下:#include<iostream>#include<fstream>#include<s...
最好能在下面基础上改 下面代码没有排序 单词个数统计功能 不用考虑单词的词态
代码如下:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void Loadfile(char *filename,char *a)
{
ifstream infile(filename);
infile.getline(a,10000,'\0');
infile.close();
}
void SaveWords(char *filename,char b[100][100],int k)
{
ofstream outfile(filename);
for(int i=0;i<k;i++)
{
outfile<<"b["<<i<<"]=";
for(int j=0;b[i][j]!='\0';j++)
{
outfile<<b[i][j];
}
outfile<<endl;
}
outfile.close();
}
void sort(char b[100][100],int k)
{
for(int i=0;i<k;i++)
{
for(int j=0;j<k;j++)
{
if(b[j][0]>b[j+1][0])
{
for(int l=0;l<10;l++)
{
char a[10];
a[l]=b[j][l];
b[j][l]=b[j+1][l];
b[j+1][l]=a[l];
}
}
}
}
SaveWords("SortWords.txt",b,k);
}
void EctractWords()//从文件里面提取单词并用二维字符串表示
{
char a[10000];char b[100][100];
//char * c [100];
//c[1]=new char[10];strcpy(c[1],"sss");
//delete[] c[1];
int p=0;int k=0;
Loadfile("D://1.txt",a);
for(int i=0;a[i];i++)
{
cout<<"a["<<i<<"] = "<<a[i]<<endl;
}
for(int i=0;a[i]!='\0'&& (int)a[i]!=13;i++)
{
for(int j=0;a[j]!='\0'&& (int)a[j]!=13;j++)
{
if((a[p+j]!=' ' && a[p+j]!='.'))
{
b[k][j]=a[p+j];
}
else
{
p+=j;
b[i][j]='\0';
p++;
k++;
break;
}
}
}
/* int ss[100];//保存每个单词的个数 这段代码有错误
for(int i=0;a[i]!='$'&& (int)a[i]!=13;i++)
{
ss[i]=1;
for(int j=0;a[i]!='$'&& (int)a[i]!=13;j++)
{
if(!0==strcmp(b[i],b[i+j]))
ss[i]=ss[i]+1;
}
}
for(int i=0;i<k;i++)
{
cout<<"b["<<i<<"]=";
for(int j=0;b[i][j]!='\0';j++)
{
cout<<b[i][j];
}
cout<<" "<<"单词个数"<<endl;
}
SaveWords("Words.txt",b,k);
sort(b,k);
}
int main()
{
EctractWords();
return 0;
} 展开
代码如下:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void Loadfile(char *filename,char *a)
{
ifstream infile(filename);
infile.getline(a,10000,'\0');
infile.close();
}
void SaveWords(char *filename,char b[100][100],int k)
{
ofstream outfile(filename);
for(int i=0;i<k;i++)
{
outfile<<"b["<<i<<"]=";
for(int j=0;b[i][j]!='\0';j++)
{
outfile<<b[i][j];
}
outfile<<endl;
}
outfile.close();
}
void sort(char b[100][100],int k)
{
for(int i=0;i<k;i++)
{
for(int j=0;j<k;j++)
{
if(b[j][0]>b[j+1][0])
{
for(int l=0;l<10;l++)
{
char a[10];
a[l]=b[j][l];
b[j][l]=b[j+1][l];
b[j+1][l]=a[l];
}
}
}
}
SaveWords("SortWords.txt",b,k);
}
void EctractWords()//从文件里面提取单词并用二维字符串表示
{
char a[10000];char b[100][100];
//char * c [100];
//c[1]=new char[10];strcpy(c[1],"sss");
//delete[] c[1];
int p=0;int k=0;
Loadfile("D://1.txt",a);
for(int i=0;a[i];i++)
{
cout<<"a["<<i<<"] = "<<a[i]<<endl;
}
for(int i=0;a[i]!='\0'&& (int)a[i]!=13;i++)
{
for(int j=0;a[j]!='\0'&& (int)a[j]!=13;j++)
{
if((a[p+j]!=' ' && a[p+j]!='.'))
{
b[k][j]=a[p+j];
}
else
{
p+=j;
b[i][j]='\0';
p++;
k++;
break;
}
}
}
/* int ss[100];//保存每个单词的个数 这段代码有错误
for(int i=0;a[i]!='$'&& (int)a[i]!=13;i++)
{
ss[i]=1;
for(int j=0;a[i]!='$'&& (int)a[i]!=13;j++)
{
if(!0==strcmp(b[i],b[i+j]))
ss[i]=ss[i]+1;
}
}
for(int i=0;i<k;i++)
{
cout<<"b["<<i<<"]=";
for(int j=0;b[i][j]!='\0';j++)
{
cout<<b[i][j];
}
cout<<" "<<"单词个数"<<endl;
}
SaveWords("Words.txt",b,k);
sort(b,k);
}
int main()
{
EctractWords();
return 0;
} 展开
展开全部
//============================================================================
// Name : BaiduZhidao1.cpp
// Author : hl
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//120求高手!C++ 词频统计 不用map 要求指针数组啥的最好能帮我这救回来要求能显示每个单词个数能首字母排序
//============================================================================
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;
//********************** BY HL *******************************
//单词数据库
class WordDB
{
public:
std::vector<string> m_words; //所有单词,每个单词是一个string对象
std::vector<int> m_wordCount; //每个单词的个数
int m_nWord; //单词个数
WordDB()
{
m_nWord=0;
}
~WordDB()
{
clear();
}
void clear()
{
m_nWord=0;
m_words.clear();
m_wordCount.clear();
}
//添加一个新单词到库中,如果该单词已经存在库中,则增加该单词的计数
//返回该单词的最新计数
int addWord(string word)
{
int i = searchWord(word);//搜索数据库中是否已经存在该单词,i为单词索引
//如果不存在该单词,则添加到单词数组尾部
if (i==-1)
{
m_words.push_back(word);
m_wordCount.push_back(1);//该新单词计数初始为1
m_nWord = m_nWord+1;//总单词数+1
return 1;
}
else
{
//该单词已经存在,则该单词计数+1
m_wordCount[i] = m_wordCount[i]+1;
return m_wordCount[i];
}
}
//显示每个单词及每个单词的个数
void show()
{
int n = m_nWord;
for (int i=0;i<n;i++)
{
cout<<m_words[i]<<" "<<m_wordCount[i]<<endl;
}
}
private:
//搜索单词,返回在数据库单词数据(m_words)中的索引号,如果没找到该单词,返回-1
//用穷举法搜索
int searchWord(string word)
{
int n = m_nWord;
for (int i=0;i<n;i++)
{
string str = m_words[i];//数据库中第i个单词
int res = str.compare(word);//比较word和str字符串,如果一样返回0
if (res==0)
return i;
}
return -1;
}
};
//********************** END BY HL *******************************
void Loadfile(char *filename,char *a)
{
ifstream infile(filename);
infile.getline(a,10000,'\0');//这里会统一将换行符转为'\n'(ASCII CODE=10)
infile.close();
}
void SaveWords(char *filename,char b[100][100],int k)
{
ofstream outfile(filename);
for(int i=0;i<k;i++)
{
outfile<<"b["<<i<<"]=";
for(int j=0;b[i][j]!='\0';j++)
{
outfile<<b[i][j];
}
outfile<<endl;
}
outfile.close();
}
void sort(char b[100][100],int k)
{
for(int i=0;i<k;i++)
{
for(int j=0;j<k;j++)
{
if(b[j][0]>b[j+1][0])
{
for(int l=0;l<10;l++)
{
char a[10];
a[l]=b[j][l];
b[j][l]=b[j+1][l];
b[j+1][l]=a[l];
}
}
}
}
SaveWords("SortWords.txt",b,k);
}
void EctractWords()//从文件里面提取单词并用二维字符串表示
{
char a[10000];
char b[100][100];
//char * c [100];
//c[1]=new char[10];strcpy(c[1],"sss");
//delete[] c[1];
int p=0;//当前读取到字符串a的位置
int k=0;//b中的单词个数
//将文件读取到字符串a中
Loadfile("D://1.txt",a);
for(int i=0;a[i];i++)
{
cout<<"a["<<i<<"] = "<<(int)a[i]<<endl;
}
//从字符串a中提取单词,并保存到b中
for(int i=0; a[p]!='\0'; i++)
{
while ( a[p]==' ' ||
a[p]=='.' ||
a[p]=='\n' || a[p]=='\t')
p++;
int j=0;
for (j=0;
a[p+j]!=' ' && a[p+j]!='.'
&& a[p+j]!='\n'
&& a[p+j]!='\t'
&& a[p+j]!='\0';
j++)
{
b[k][j]=a[p+j];//构造单词b[k]
}
p+=j;
b[i][j]='\0';
p++;
k++;//单词数+1
}
//********************** ADD BY HL *******************************
WordDB wordDB;
for (int i=0;i<k;i++)
{
string word=b[i];
wordDB.addWord(word);
}
cout<<"显示单词个数"<<endl;
wordDB.show();
//********************** END BY HL *******************************
// int ss[100];//保存每个单词的个数 这段代码有错误
// for(int i=0;a[i]!='$'&& (int)a[i]!=13;i++)
// {
// ss[i]=1;
// for(int j=0;a[i]!='$'&& (int)a[i]!=13;j++)
// {
// if(!0==strcmp(b[i],b[i+j]))
// ss[i]=ss[i]+1;
// }
//
// }
// for(int i=0;i<k;i++)
// {
// cout<<"b["<<i<<"]=";
// for(int j=0;b[i][j]!='\0';j++)
// {
// cout<<b[i][j];
// }
// cout<<" "<<"单词个数"<<endl;
// }
//
cout<<"排序"<<endl;
SaveWords("Words.txt",b,k);
sort(b,k);
}
int main()
{
EctractWords();
return 0;
}
// Name : BaiduZhidao1.cpp
// Author : hl
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//120求高手!C++ 词频统计 不用map 要求指针数组啥的最好能帮我这救回来要求能显示每个单词个数能首字母排序
//============================================================================
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;
//********************** BY HL *******************************
//单词数据库
class WordDB
{
public:
std::vector<string> m_words; //所有单词,每个单词是一个string对象
std::vector<int> m_wordCount; //每个单词的个数
int m_nWord; //单词个数
WordDB()
{
m_nWord=0;
}
~WordDB()
{
clear();
}
void clear()
{
m_nWord=0;
m_words.clear();
m_wordCount.clear();
}
//添加一个新单词到库中,如果该单词已经存在库中,则增加该单词的计数
//返回该单词的最新计数
int addWord(string word)
{
int i = searchWord(word);//搜索数据库中是否已经存在该单词,i为单词索引
//如果不存在该单词,则添加到单词数组尾部
if (i==-1)
{
m_words.push_back(word);
m_wordCount.push_back(1);//该新单词计数初始为1
m_nWord = m_nWord+1;//总单词数+1
return 1;
}
else
{
//该单词已经存在,则该单词计数+1
m_wordCount[i] = m_wordCount[i]+1;
return m_wordCount[i];
}
}
//显示每个单词及每个单词的个数
void show()
{
int n = m_nWord;
for (int i=0;i<n;i++)
{
cout<<m_words[i]<<" "<<m_wordCount[i]<<endl;
}
}
private:
//搜索单词,返回在数据库单词数据(m_words)中的索引号,如果没找到该单词,返回-1
//用穷举法搜索
int searchWord(string word)
{
int n = m_nWord;
for (int i=0;i<n;i++)
{
string str = m_words[i];//数据库中第i个单词
int res = str.compare(word);//比较word和str字符串,如果一样返回0
if (res==0)
return i;
}
return -1;
}
};
//********************** END BY HL *******************************
void Loadfile(char *filename,char *a)
{
ifstream infile(filename);
infile.getline(a,10000,'\0');//这里会统一将换行符转为'\n'(ASCII CODE=10)
infile.close();
}
void SaveWords(char *filename,char b[100][100],int k)
{
ofstream outfile(filename);
for(int i=0;i<k;i++)
{
outfile<<"b["<<i<<"]=";
for(int j=0;b[i][j]!='\0';j++)
{
outfile<<b[i][j];
}
outfile<<endl;
}
outfile.close();
}
void sort(char b[100][100],int k)
{
for(int i=0;i<k;i++)
{
for(int j=0;j<k;j++)
{
if(b[j][0]>b[j+1][0])
{
for(int l=0;l<10;l++)
{
char a[10];
a[l]=b[j][l];
b[j][l]=b[j+1][l];
b[j+1][l]=a[l];
}
}
}
}
SaveWords("SortWords.txt",b,k);
}
void EctractWords()//从文件里面提取单词并用二维字符串表示
{
char a[10000];
char b[100][100];
//char * c [100];
//c[1]=new char[10];strcpy(c[1],"sss");
//delete[] c[1];
int p=0;//当前读取到字符串a的位置
int k=0;//b中的单词个数
//将文件读取到字符串a中
Loadfile("D://1.txt",a);
for(int i=0;a[i];i++)
{
cout<<"a["<<i<<"] = "<<(int)a[i]<<endl;
}
//从字符串a中提取单词,并保存到b中
for(int i=0; a[p]!='\0'; i++)
{
while ( a[p]==' ' ||
a[p]=='.' ||
a[p]=='\n' || a[p]=='\t')
p++;
int j=0;
for (j=0;
a[p+j]!=' ' && a[p+j]!='.'
&& a[p+j]!='\n'
&& a[p+j]!='\t'
&& a[p+j]!='\0';
j++)
{
b[k][j]=a[p+j];//构造单词b[k]
}
p+=j;
b[i][j]='\0';
p++;
k++;//单词数+1
}
//********************** ADD BY HL *******************************
WordDB wordDB;
for (int i=0;i<k;i++)
{
string word=b[i];
wordDB.addWord(word);
}
cout<<"显示单词个数"<<endl;
wordDB.show();
//********************** END BY HL *******************************
// int ss[100];//保存每个单词的个数 这段代码有错误
// for(int i=0;a[i]!='$'&& (int)a[i]!=13;i++)
// {
// ss[i]=1;
// for(int j=0;a[i]!='$'&& (int)a[i]!=13;j++)
// {
// if(!0==strcmp(b[i],b[i+j]))
// ss[i]=ss[i]+1;
// }
//
// }
// for(int i=0;i<k;i++)
// {
// cout<<"b["<<i<<"]=";
// for(int j=0;b[i][j]!='\0';j++)
// {
// cout<<b[i][j];
// }
// cout<<" "<<"单词个数"<<endl;
// }
//
cout<<"排序"<<endl;
SaveWords("Words.txt",b,k);
sort(b,k);
}
int main()
{
EctractWords();
return 0;
}
追问
通不过编译啊 能看下你那编译的结果么
追答
我可以编译啊,在eclipse c++平台上编译的,你看一下编译报什么错。
可能是你的C++库不支持searchWord函数里的string.compare函数,试一下用string::compare或strcmp(str.c_str(), str2.c_str())
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询