poj_1035 串

对每个给定的词,在字典中查是否equal,或者是否可以通过replace、insert、delete构成,若可以,记录。水题。

code:

<span style="font-size:18px;">#include <iostream>
#include <fstream>

using namespace std;

char dict[10001][16];
char word[51][16];
int dictNum = 0;
int wordNum = 0;
int dictLen = 0;

bool replace(char *word, char *dict)
{
	int dif = 0;
	while (*word)
	{
		if (*(word++) != *(dict++))
		{
			dif++;
			if (dif > 1)
				return false;
		}
	}
	return true;
}

bool insert(char *word,char *dict)
{
	int dif = 0;
	while (*word)
	{
		if (*(word) != *(dict))
		{
			dict++;
			dif++;
			if (dif > 1)
				return false;
		}
		else
		{
			word++;
			dict++;
		}
	}
	return true;
}

bool del(char *word,char *dict)
{
	int dif = 0;
	while (*word)
	{
		if (*(word) != *(dict))
		{
			word++;
			dif++;
			if (dif > 1)
				return false;
		}
		else
		{
			word++;
			dict++;
		}
	}
	return true;
}

int main()
{
	int i, j;
	//ifstream in("input.txt");
	//input data
	while (cin >> dict[dictNum] && dict[dictNum++][0] != '#')
		;
	while (cin >> word[wordNum] && word[wordNum++][0] != '#')
		;
	dictNum--;
	wordNum--;
	int *dictLen = new int[dictNum];
	for (i = 0; i < dictNum; i++)
	{
		dictLen[i] = strlen(dict[i]);
	}
	//handle:delete\replace\insert
	for (i = 0; i < wordNum; i++) 
	{
		int *loc = new int[dictNum];//the change location
		int ploc = 0;//change numbers
		bool flag = false;//now the dict does not have the word
		int wordLen = strlen(word[i]);
		for (j = 0; j < dictNum; j++)
		{
			if (wordLen == dictLen[j])//replace or equal
			{
				if (!strcmp(word[i], dict[j]))//equal
				{
					flag = true;
					break;
				}
				else if (replace(word[i],dict[j]))//replace
				{
					loc[ploc++] = j;
				}
			}
			else if (wordLen == dictLen[j]-1)//insert
			{
				if (insert(word[i], dict[j]))
					loc[ploc++] = j;
			}
			else if (wordLen == dictLen[j] + 1)//delete
			{
				if (del(word[i], dict[j]))
					loc[ploc++] = j;
			}
		}
		//output
		if (flag)
		{
			cout << word[i] << " is correct" << endl;
		}
		else
		{
			cout << word[i] << ": ";
			for (j = 0; j < ploc; j++)
			{
				cout << dict[loc[j]] << " ";
			}
			cout << endl;
		}
	}
	//system("pause");
	return 0;
}</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值