POJ 1035

本文介绍了一个简单的拼写检查程序实现,通过对比输入词汇与词典中的正确词汇来判断单词是否拼写正确,并能找出拼写错误单词的相近正确词汇。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<string>
using namespace std;
/*
*poj 1035
*Author:Biang Hoo
*August 2 2013
*/
int main(){

	string Dictionary[10001];
	string check[51];
	string output[100];
	int num=0;//the input number of dictionary
	int j=0;//the input num of check
	string str;

	while(cin>>str && str != "#"){
			Dictionary[num] = str;
			num++;
	}
	while(cin>>str && str != "#"){
			check[j] = str;
			j++;
	}

	for( int i=0;i<j;i++){
		bool find = false;
		int m;
		for(m=0;m<num;m++){
			if(check[i]==Dictionary[m]){
				cout<<check[i]<<" is correct"<<endl;
				find=true;
				break;
			}
		}
		if(!find){
			const char * word = check[i].c_str();
			int word_len = check[i].length();
			cout<<check[i]<<":"<<" ";
			for(m=0;m<num;m++){
				int dic_len=Dictionary[m].length();
				if(dic_len==word_len || dic_len==word_len-1 || dic_len == word_len+1 ){
					const char * dic =Dictionary[m].c_str();
					int diff=0;
					bool equal=true;
					if(dic_len==word_len){
						
						for(int z=0;z<word_len;z++){
							if(word[z] != dic[z]){
								diff++;
								if(diff>1){
									equal=false;
									break;
								}
							}
						}
						
						if(equal){
							cout<<dic<<" ";
						}
						
					}else if(dic_len == word_len-1){
						int word_num=0;
						int dic_num=0;
						
						while(word_num<word_len){
							if(word[word_num] != dic[dic_num]){
								word_num++;
								diff++;
								if(diff>1){  
									equal =false;
									break;  
								}
							}else{  
									word_num++;  
									dic_num++;  
							}
						}
						
						if(equal){
							cout<<dic<<" ";
						}
						
					}else{
						int word_num=0;
						int dic_num=0;

						while(dic_num<dic_len){  
							if(word[word_num] != dic[dic_num]){  
								dic_num++;   
								diff++;  
								if(diff>1){  
									equal =false;
									break;  
								}
							}else{  
								word_num++;  
								dic_num++;  
							} 
						}

						if(equal){
							cout<<dic<<" ";
						}
												
					}
				}
			}
			cout<<endl;
		}
		find=false;
	}
	
	return 0;
}
#include<iostream>
#include<string>
using namespace std;
/*
*poj 1035
*Author:Biang Hoo
*August 2 2013
*/
void process(string word_str,string dic_str,int word_len,int dic_len){
	const char * word = word_str.c_str();
	const char * dic =dic_str.c_str();
	int diff=0;
	bool equal=true;
	if(dic_len==word_len){
		
		for(int z=0;z<word_len;z++){
			if(word[z] != dic[z]){
				diff++;
				if(diff>1){
					equal=false;
					break;
				}
			}
		}
		
		if(equal){
			cout<<dic<<" ";
		}
		
	}else if(dic_len == word_len-1){
		int word_num=0;
		int dic_num=0;
		
		while(word_num<word_len){
			if(word[word_num] != dic[dic_num]){
				word_num++;
				diff++;
				if(diff>1){  
					equal =false;
					break;  
				}
			}else{  
					word_num++;  
					dic_num++;  
			}
		}
		
		if(equal){
			cout<<dic<<" ";
		}
		
	}else{
		int word_num=0;
		int dic_num=0;

		while(dic_num<dic_len){  
			if(word[word_num] != dic[dic_num]){  
				dic_num++;   
				diff++;  
				if(diff>1){  
					equal =false;
					break;  
				}
			}else{  
				word_num++;  
				dic_num++;  
			} 
		}

		if(equal){
			cout<<dic<<" ";
		}
								
	}
	
}
int main(){

	string Dictionary[10001];
	string check[51];
	string output[100];
	int num=0;//the input number of dictionary
	int j=0;//the input num of check
	string str;

	while(cin>>str && str != "#"){
			Dictionary[num] = str;
			num++;
	}
	while(cin>>str && str != "#"){
			check[j] = str;
			j++;
	}

	for( int i=0;i<j;i++){
		bool find = false;
		int m;
		for(m=0;m<num;m++){
			if(check[i]==Dictionary[m]){
				cout<<check[i]<<" is correct"<<endl;
				find=true;
				break;
			}
		}
		if(!find){
			//const char * word = check[i].c_str();
			int word_len = check[i].length();
			cout<<check[i]<<":"<<" ";
			for(m=0;m<num;m++){
				int dic_len=Dictionary[m].length();
				if(dic_len==word_len || dic_len==word_len-1 || dic_len == word_len+1 ){
					//const char * dic =Dictionary[m].c_str();
					process(check[i],Dictionary[m],word_len,dic_len);
				}
			}
			cout<<endl;
		}
		find=false;
	}
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值