1. 程式人生 > >對string型變數的頻率統計(文章單詞檢索)

對string型變數的頻率統計(文章單詞檢索)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<string,ll> mp;
set<string> ss;


void cnt(const string s,string sp)
{
for(ll i=0; i<s.length(); i++)
{
if(s[i]==sp[0])
{
int judge=1;
for(ll j=0; j<sp.length(); j++)
{
if(s[i+j]!=sp[j])
{
judge=0;
break;
}
}
if(judge)
{
mp[sp]++;
}
}
}
}
int main()
{
ll n;
string s,sp;
ifstream fin;
char c;
fin.open("wenzhang.txt",ios::in);
if(!fin)
{
cout<<"cannot open input file"<<endl;
exit(1);
}
while(fin>>c)
{
if(isalpha(c))
{
c=tolower(c);
}
s+=c;
}
cout<<"原文章為:"<<s<<endl;
cout<<"輸入你想查詢的字串的個數:"<<endl;
cin>>n;
cout<<"輸入這些字串:"<<endl;
for(ll i=1; i<=n; i++)
{
cout<<"第"<<i<<"個字串:"<<endl;
cin>>sp;
ss.insert(sp);
}
for(set<string>::iterator is=ss.begin(); is!=ss.end(); is++)
{
cnt(s,*is);
}
ofstream fout;
fout.open("appeartimes.txt",ios::out);
if(!fout)
{
cout<<"cannot open output file"<<endl;
exit(1);
}
for(set<string>::iterator is=ss.begin();is!=ss.end();is++)
{
cout<<*is<<"出現的次數為:"<<mp[*is]<<endl;
fout<<*is<<"出現的次數為:"<<mp[*is]<<endl;
}
return 0;
}

這個程式是用檔案輸入,只需要在工程檔案中建立一個名為wenzhang.txt的文字文件並把要檢索的文章貼上進去即可。

最開始的時候我用fin>>s打算把整篇文章輸入到一個string中發現遇到空格就停止輸入了,因此才改用while(cin>>c)的形式輸入到string中,當然用scanf("%c",&c)!=EOF也可以輸入