Description : 对某一输入的字符串删除出现次数最少的单词,输出删除单词后的字符串
Prototype : void GetFilteredString(char* pInString,char** ppOutString)
Input Param : char* pInString 输入字符串
Output Param : char** ppOutString 输出字符串,内存空间由函数实现者申请,使用者释放
Return Value : 无
#include <vector>
#include <map>
#include <string>
#include <stdio.h>
using namespace std;
/******************************************************************************************************
Description : 对某一输入的字符串删除出现次数最少的单词,输出删除单词后的字符串
Prototype : void GetFilteredString(char* pInString,char** ppOutString)
Input Param : char* pInString 输入字符串
Output Param : char** ppOutString 输出字符串,内存空间由函数实现者申请,使用者释放
Return Value : 无
********************************************************************************************************/
void GetFilteredString(char* pInString,char** ppOutString)
{
map<string, int> my_map;
vector<string> my_vec;
map<string, int>::iterator key;
vector<string>::iterator key_vec;
int i = -1;
int start_index = 0;
int min = 0x10000;
string temp = "";
int length = 0;
if (pInString == 0 || ppOutString == 0)
{
return;
}
do
{
i++;
if (pInString[i] == 0 || pInString[i] == ' ')
{
string s(pInString, start_index, i - start_index);
my_map[s]++;
my_vec.push_back(s);
start_index = i + 1;
}
} while (pInString[i] != 0);
for (key = my_map.begin(); key != my_map.end(); key++)
{
if (key->second<min)
{
min = key->second;
}
}
for (key = my_map.begin(); key != my_map.end(); key++)
{
if (key->second != min)
length += ((int)((key->first).length()) + 1)*key->second;
}
*ppOutString = (char *)malloc((length + 1) * sizeof(char));
if (*ppOutString == 0)
{
return;
}
for (key_vec = my_vec.begin(); key_vec != my_vec.end(); key_vec++)
{
if (my_map[*key_vec] != min)
{
temp += *key_vec;
temp += " ";
}
}
if (temp != "")
{
temp.erase(temp.length() - 1, 1);//删除最后一个空格
}
strcpy(*ppOutString, temp.c_str());
return;
}