rehet
January 10th, 2007, 12:07 AM
hye.. i really need ur guys help.. im stuck.. i want to count the word freq and print them according to the word length.. > the longest be output first..
ouh.. and my input must be alphabet or alhabet+numeric only..
here what i did so far..
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Cmp : public std::binary_function<std::string,std::string,bool> {
public:
bool operator()(const std::string& s1, const std::string& s2){ //????
}
};
//typedef std::map<std::string, int, Cmp> MAP;
typedef enum {s1, s2} STATUS;
struct Count {
int N;
Count() : N(0) {}
operator int() { return N; }
void operator++() { N++; }
};
typedef map<string,Count> Map;
int main(void){
char c;
map<string,Count> m;
std::string buffer;
STATUS status=s1;
// while( cin >> str ) stringCounts[str]++;
while(std::cin >> c){
switch(status){
case s1:
if(isalpha(c)){
// m[string]++;
buffer=c;
status=s2;
}
break;
case s2:
if(isalnum(c)){
buffer+=c;
}else{
//std::cout << s1 << s2 << std::endl;
std::cout << c << buffer << std::endl;
status=s1;
}
break;
}
}
if(status=s2){
Map::iterator i = m.begin();
while ( i != m.end() ) {
cout << i->first << ':'
<< i->second << endl;
++i;
std::cout << c << buffer << std::endl;
}
}
return 0;
}
can you guys please help me.
ouh.. and my input must be alphabet or alhabet+numeric only..
here what i did so far..
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Cmp : public std::binary_function<std::string,std::string,bool> {
public:
bool operator()(const std::string& s1, const std::string& s2){ //????
}
};
//typedef std::map<std::string, int, Cmp> MAP;
typedef enum {s1, s2} STATUS;
struct Count {
int N;
Count() : N(0) {}
operator int() { return N; }
void operator++() { N++; }
};
typedef map<string,Count> Map;
int main(void){
char c;
map<string,Count> m;
std::string buffer;
STATUS status=s1;
// while( cin >> str ) stringCounts[str]++;
while(std::cin >> c){
switch(status){
case s1:
if(isalpha(c)){
// m[string]++;
buffer=c;
status=s2;
}
break;
case s2:
if(isalnum(c)){
buffer+=c;
}else{
//std::cout << s1 << s2 << std::endl;
std::cout << c << buffer << std::endl;
status=s1;
}
break;
}
}
if(status=s2){
Map::iterator i = m.begin();
while ( i != m.end() ) {
cout << i->first << ':'
<< i->second << endl;
++i;
std::cout << c << buffer << std::endl;
}
}
return 0;
}
can you guys please help me.