标签:华为入职练习 华为oj
/****************************************************************************** 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; }
标签:华为入职练习 华为oj
原文地址:http://blog.csdn.net/xiaohanstu/article/details/42653535