#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <cctype>
using namespace std;
class StringEqual{
public:
StringEqual(const string &s): _str(s) {};
bool operator()(pair<string , int> pr)
{
if (pr.first == _str)
return true;
else
return false;
}
private:
string _str;
};
bool CompareMore(pair<string, int> left, pair<string, int> right)
{
return (left.second > right.second);
}
void GetWords(char *InputString, char *OutputString)
{
char *pInStart = InputString;
char *pOutStart = OutputString;
string word;
pair<string, int> prStringCount;
vector<pair<string, int>> vWordSet;
if (*pInStart == '\0') { // InputString为空
*pOutStart = *pInStart;
return ;
}
do {
if (*pInStart == ' ' || *pInStart == '\t' || *pInStart == '\n' || ispunct(*pInStart)) {
if (!word.empty()) {
// vector<pair<string, int>>::iterator vit = find_if(vWordSet.begin(), vWordSet.end(), StringEqual(word));
// if (vit != vWordSet.end()) {
// vit->second++;
// } else {
// prStringCount.first = word;
// prStringCount.second = 1;
// vWordSet.push_back(prStringCount);
// }
vector<pair<string, int>>::iterator vit = vWordSet.begin();
while (vit != vWordSet.end()) {
if (vit->first == word)
break;
++vit;
}
if (vit == vWordSet.end()) {
prStringCount.first = word;
prStringCount.second = 1;
vWordSet.push_back(prStringCount);
} else {
vit->second++;
}
word.clear();
}
} else if(isalnum(*pInStart)) {
word += *pInStart;
}
} while (*++pInStart != '\0');
stable_sort(vWordSet.begin(), vWordSet.end(), CompareMore);
for (vector<pair<string, int>>::iterator vit = vWordSet.begin(); vit != vWordSet.end(); ++vit) {
int size = vit->first.size();
strcpy(pOutStart, &(vit->first[0]));
pOutStart += size;
*pOutStart++ = ' ';
}
if (!vWordSet.empty())
pOutStart--;
*pOutStart = '\0';
}
int main()
{
char InputString[] = " Life is what you can make it,so try to make it beautiful! it";
char OutputString[128] = {0};
GetWords(InputString, OutputString);
printf("OutputString:%s\n", OutputString);
system("pause");
return 0;
}
GetWords
最新推荐文章于 2021-05-17 21:55:55 发布