您的位置:首页 > 其它

Poj 1035 --Spell checker

2010-12-04 04:23 363 查看
这题学到了很多很多知识,首先是string::insert,string::erase 这两个方法,http://www.cplusplus.com/reference/string/string/erase/ 这个网站非常好,可以查到STL库函数,而且都是有例子来说明,简明扼要,精彩的是把所有重载的方法在一个程序里面全部举出例子。第二个是在运行程序的时候发现Dev-C++的MinGW编译器和vs2010的编译器在实现方面有差别,主要是向量越界检查这一点,MinGW是不检查,而vs2010需要检查,并且不能执行程序,

#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
void replace(string s1,string s2);
void ins(string s1,string s2);
void del(string s1,string s2);
int main()
{
ifstream cin("d://1.txt");
vector<string> v1;
string s;
int i,j,flag;
while(1){
cin>>s;
if(s=="#")break;
v1.push_back(s);
}
while(1){
flag=0;
cin>>s;
if(s=="#") break;
for(i=0;i!=v1.size();i++)
if(v1[i]==s){
cout<<s<<" is correct"<<endl;
flag=1;
break;
}
if(flag==1)continue;
else{
cout<<s<<":";
for(i=0;i!=v1.size();i++){
if(s.length()==v1[i].length())
replace(s,v1[i]);
if(s.length()==v1[i].length()+1)
ins(s,v1[i]);
if(s.length()==v1[i].length()-1)
del(s,v1[i]);
}
cout<<endl;
}
}
system("pause");
return 0;
}
void replace(string s1,string s2)
{
string res=s2;
int i,count=0;;
for(i=0;i!=s1.length();i++)
if(s1[i]!=s2[i])
count++;
if(count==1)
cout<<" "<<res;
}
void ins(string s1,string s2)
{
int i;
string res=s2;
for(i=0;i!=s1.size();i++){
if(s2[i]!=s1[i]){
s2.insert(i,1,s1[i]);
break;
}
}
if(s2==s1) cout<<" "<<res;
}
void del(string s1,string s2)
{
int i;
string res=s2;
for(i=0;i!=s2.size();i++){
if(s2[i]!=s1[i]){
s2.erase(i,1);
break;
}
}
if(s2==s1)cout<<" "<<res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: