/******************************************************************************
Copyright (C), 2001-2012, Huawei Tech. Co., Ltd.
******************************************************************************
File Name : FindSimilarWord.cpp
Version :
Author :
Created : 2012/09
Last Modified :
Description :
Function List :
History :
1.Date : 2012/09
Author :
Modification: Created file
******************************************************************************/
#include<iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
map<string, string> g_SubMap;
/******************************************************************************
原 型:int AddOneWord (char* Word);
功 能:在字典中增加一个单词
输入参数:
Word 单词字符串,调用者保证Word指针不为空,指向的是合法单词
输出参数:
无
返回值:
-1 失败(单词在字典中已存在等情况)
0 成功
********************************************************************************/
int AddOneWord (char* Word)
{
/* 在这里实现功能 */
if (NULL == Word)
{
return -1;
}
string sAddWord =Word;
map<string, string>::iterator itr = g_SubMap.find(sAddWord);
if (g_SubMap.end() != itr)
{
return -1;
}
string sAddWordSub = Word;
sort(sAddWordSub.begin(), sAddWordSub.end());
g_SubMap.insert(make_pair(sAddWord, sAddWordSub));
return 0;
}
/******************************************************************************
原 型:int FindSimilarWordNum (char* Word);
功 能:查找指定单词在字典中的兄弟单词个数
输入参数:
Word 指定单词字符串,调用者保证Word指针不为空,指向的是合法单词
输出参数:
无
返回值:
返回指定单词在字典中的兄弟单词总个数。如果不存在兄弟单词,返回0
*******************************************************************************/
int FindSimilarWordNum (char* Word)
{
/* 在这里实现功能 */
if (NULL == Word)
{
return 0;
}
string sTemp = Word;
string sSub = Word;
sort(sSub.begin(), sSub.end());
int count = 0;
for (map<string, string>::iterator itr = g_SubMap.begin(); itr != g_SubMap.end(); ++itr)
{
if (itr->second == sSub && itr->first != sTemp)
{
count++;
}
}
return count;
}
/******************************************************************************
原 型:int FindOneSimilarWord (char* Word, int Seq, char* SimilarWord);
功 能:查找指定单词的指定序号的兄弟单词,指定序号指字典中兄弟单词按字典顺序
排序后的序号(从1开始)
输入参数:
Word 指定单词字符串,调用者保证Word指针不为空,指向的是合法单词
Seq 指定序号(大于等于1)
输出参数:
SimilarWord 返回兄弟单词字符串,指针不为空,指向的内存由调用者预先分配,
占51个字节长度,输出的兄弟单词必须紧跟’\0’结束。如果不存在指定序号的
兄弟单词,输出空串。
返回值:
-1 失败(如果不存在指定序号的兄弟单词,返回失败)
0 成功
*******************************************************************************/
int FindOneSimilarWord (char* Word, int Seq, char* SimilarWord)
{
/* 在这里实现功能 */
if (NULL == Word || NULL == SimilarWord || 0 >= Seq)
{
return -1;
}
int count =0;
string sTemp = Word;
string sSub = Word;
sort(sSub.begin(), sSub.end());
for (map<string, string>::iterator itr = g_SubMap.begin(); itr != g_SubMap.end(); ++itr)
{
if (itr->second == sSub && itr->first != sTemp)
{
count++;
if (Seq == count)
{
strncpy(SimilarWord, (itr->first).c_str(), (itr->first).length());
return 0;
}
}
}
SimilarWord[0] = '\0';
return -1;
}
/******************************************************************************
原 型:void ClearAllWords(void);
功 能:清空字典中所有单词
输入参数:
无
输出参数:
无
返回值:
无
*******************************************************************************/
void ClearAllWords(void)
{
/* 在这里实现功能 */
g_SubMap.clear();
}
int main()
{
char *Test_Word[7] = {
"mock",
"aabc",
"abc",
"ckom",
"bcaa",
"abca",};
AddOneWord(Test_Word[0]);
AddOneWord(Test_Word[1]);
AddOneWord(Test_Word[2]);
AddOneWord(Test_Word[3]);
AddOneWord(Test_Word[4]);
AddOneWord(Test_Word[5]);
int Expectnumber = 1;
int ActualNumber;
int Ret;
ActualNumber = FindSimilarWordNum (Test_Word[0]);
char *ExpectWord = {"bcaa"};
char SimilarWord[51] = {'\0'};
int Seq = 2;
Ret = FindOneSimilarWord (Test_Word[1], Seq, SimilarWord);
return 0;
}
查找兄弟单词
最新推荐文章于 2020-03-03 11:38:37 发布