以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [求助]编一程序:使单词分开并使相同单词按字符串大小排列  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=34355)


--  作者:jjtt5566
--  发布时间:6/14/2006 12:34:00 AM

--  [求助]编一程序:使单词分开并使相同单词按字符串大小排列
麻烦各位大虾帮帮忙!!!最好用C/C++ 其他的也可以
问题:编写一个程序,其功能是将用户输入的一段英文(注意:包含空格、逗号、句号、及英文字母)分离出单词,并以每个单词出现的次数从高到底输出单词及其次数。次数相同的单词以其对应字符串大小升序输出。
例:Green is on the left,Red is on the Righe,the right is afraid of water,the left is afraid of insects.
输出:is(4) the(4) afraid(2) left(2) of(2) on(2) right(2) Green(1) insects(1) Red(1) water(1)
提示:(1)建立一函数用于接收输入的英文段落
(2)建立字符串数组用于保存每次分离出的单词,及出现的次数(编一函数)
(3)对字符串数组按规定进行排序(编一函数)

本人邮箱:zeng-tianfeng@163.com 请大虾顺便发我邮箱里好吗?小弟急用!!!在此先谢谢大哥拉


--  作者:elfstone
--  发布时间:6/14/2006 12:57:00 PM

--  
坛子里以前有人发过这张贴,可以去找来看看
--  作者:jjtt5566
--  发布时间:6/14/2006 1:28:00 PM

--  
沙发,我找过了,找不到,你能够帮我写一下吗?我不会写这个程序。
--  作者:jjtt5566
--  发布时间:6/15/2006 11:08:00 AM

--  
哪位大哥会写啊?帮帮小弟吧,急用。。。
以前本论坛也发过一帖,是5月26的,我找了,没人回答啊。哪位大哥会了一定要写出来哦,
要不直接发我邮箱里吧:zeng-tianfeng@163.com
--  作者:jjtt5566
--  发布时间:6/15/2006 6:21:00 PM

--  
提帖提帖,不然高手都看不到这个程序,高手快过来帮我写写,
--  作者:onlyxuyang
--  发布时间:6/18/2006 3:11:00 AM

--  
一看楼主就是不思考型的
我给个提示吧
用一个map<string,int>记录单词已经对应的次数就可以了
在扫描的时候以空格和逗号做为分割符
--  作者:jjtt5566
--  发布时间:6/19/2006 10:05:00 AM

--  
同意,因为我不懂 编程,是我  朋友问我有没有懂编程的朋友,可我问了很多人都不懂,所以只得来这里发了。楼上那位兄弟,不知能否把 源程序写给我哦。
他见他整天愁眉不展的,所以就发出来请教各位高手
--  作者:enorm
--  发布时间:6/19/2006 1:22:00 PM

--  
只支持纯英文字符,标点只包括 ,&.    当然,扩充是 很容易的,   上班了有空再改~~~~~~~~
// Statistic.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <map>
#include <string>
#include <vector>
#include <set>
using namespace std;

class SortMethod: public binary_function< pair<string, int>, pair<string, int> ,bool>
{
public:
 bool operator()(pair<string, int> p1,pair<string, int> p2) const
 {
  if(p1.second==p2.second)
   return p1.first<p1.first;
  return p1.second> p2.second;
 }};

void InsertWord( string s, map<string,int,less<string> > &stringmap)
{
 map<string,int,less<string> >::iterator map_iterator=stringmap.find(s);
 if(map_iterator!=stringmap.end())
 {
  ++map_iterator->second;
 }
 else
  stringmap.insert(pair<string,int>(s,1));

}
void Findword( const char* ch, vector<string> &vecstring)
{
 char *temp=const_cast<char*>(ch);
 string s;
 int wordlenth=0;
 while((*temp)!='\0')
 {
  wordlenth=0;
  while((*temp)==' '||(*temp)=='\t')
   ++temp;
  while(((*temp)>='a'&&(*temp)<='z')||((*temp)>='A'&&(*temp)<='Z'))
  {
   ++wordlenth;
      ++temp;
 
  }
  if(wordlenth!=0)
  {
   s.assign(temp-wordlenth,wordlenth);
   vecstring.push_back(s);
  }
  
  if((*temp)==','||(*temp)=='.')
   ++temp;
 }

}

void SortFrequence(map<string,int,less<string> > &stringmap, multiset<pair<string, int>,SortMethod> &stringset)
{
 for(map<string, int, less<string> >::iterator i=stringmap.begin(); i!=stringmap.end(); ++i)
 {
  stringset.insert(*i);
 }


}
int _tmain(int argc, _TCHAR* argv[])
{
 char *t="Green is on the left,Red is on the Righe,the right is afraid of water,the left is afraid of insects";
 vector<string> vecstring;
 map<string,int,less<string> > stringmap;
 multiset<pair<string, int>,SortMethod> stringset;
 Findword(t,vecstring);
 copy(vecstring.begin(),vecstring.end(),ostream_iterator<string>(cout,"\n"));
 for(vector<string>::iterator i=vecstring.begin();i!=vecstring.end();++i)
 {
      InsertWord( *i,stringmap );
 }
 SortFrequence(stringmap, stringset);
 for(multiset<pair<string, int>,SortMethod> ::iterator seti=stringset.begin(); seti!=stringset.end();++seti)
 {
  cout<<(*seti).first<<"  ("<<(*seti).second<< ")  "<<endl;
 }

 return 0;
}


[此贴子已经被作者于2006-6-20 8:55:06编辑过]

--  作者:jjtt5566
--  发布时间:6/20/2006 12:45:00 PM

--  
楼上大哥,辛苦了。谢谢,什么时候有空改呀???有错误,
--  作者:enorm
--  发布时间:6/20/2006 1:11:00 PM

--  
可以通过编译的~~~~~~~~~~~~~~~~
算了,帮人帮到底这是工程文件,编译环境 vs2003

稍微改动一下可以在其他环境下通过的~~~~~~~~~

[此贴子已经被作者于2006-6-20 13:35:16编辑过]

--  作者:jjtt5566
--  发布时间:6/20/2006 11:54:00 PM

--  
非常感谢!!!~~~~
楼上大哥,我有个论坛,由于是刚开放的,现在急需人才,不知道大哥是否愿意帮帮忙?
回复我邮件告知好吗? zeng-tianfeng@163.com
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms