题目链接:
http://poj.org/problem?id=1035
思路是,拿每个带检测字符串和整个字典里的字进行比较,如果有一样的即为correct,如果没有一样的分三种情况:
1.长度相同.
2.带检测字长度比字典里的字少1
3.带检测字长度比字典里的字多1
长度相同时检查不同字符的个数(为1时即可以替换),长度不同时拿较短的字去匹配较长的字,较短字每个字符在较长字中的位置存放在一个数组里,匹配完成后,扫描数组看是否为递增的,并且每一个字符都在较长字中出现。
#include<stdio.h>
#include<string.h>
#define SIZE 11000
char dic[SIZE][20];
int cnt;
void read_dic()//读取字典
{
cnt = 0;
while(scanf("%s%*c",dic[cnt]))
{
if(dic[cnt][0]=='#')
break;
else
cnt++;
}
}
bool isCor(char *str)//是否正确
{
int i;
for(i=0;i<cnt;i++)
if(strcmp(dic[i],str)==0)return true;
return false;
}
void Replace(char *str)//替换
{
printf("%s:",str);
int i,j,k,arr[20],diff,isSort;
int ls = strlen(str),ld;
for(i=0;i<cnt;i++)
{
ld = strlen(dic[i]);
if(ls==ld)//如果长度相同
{
diff = 0;
for(j=0;j<ld;j++)
{
if(str[j]!=dic[i][j]) diff++;
}
if(diff==1)printf(" %s",dic[i]);
}
else if(ls==ld+1)//delete
{
memset(arr,-1,sizeof(arr));
for(j=0;j<ld;j++)
{
for(k=j==0?0:arr[j-1]+1;k<ls;k++)
{
if(str[k]==dic[i][j])
{
arr[j] = k;
break;
}
}
}
isSort = 1;
//检查arr是否有序
for(j=0;j<ld-1;j++)
{
if(arr[j+1]<arr[j]||arr[j]==-1)
{
isSort = 0;
break;
}
}
if(arr[ld-1]==-1)isSort = 0;
if(isSort)printf(" %s",dic[i]);
}
else if(ls+1==ld)//add
{
memset(arr,-1,sizeof(arr));
for(j=0;j<ls;j++)
{
for(k=j==0?0:arr[j-1]+1;k<ld;k++)
{
if(str[j]==dic[i][k])
{
arr[j] = k;
break;
}
}
}
isSort = 1;
//检查arr是否有序
for(j=0;j<ls-1;j++)
{
if(arr[j+1]<arr[j]||arr[j]==-1)
{
isSort = 0;
break;
}
}
if(arr[ls-1]==-1)isSort = 0;
if(isSort)printf(" %s",dic[i]);
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
read_dic();
char str[20];
while(scanf("%s%*c",str),str[0]!='#')
{
if(isCor(str))
printf("%s is correct\n",str);
else
{
Replace(str);
printf("\n");
}
}
}
- 大小: 15.5 KB
分享到:
相关推荐
题目poj3187和poj3669涉及的具体内容无法直接得知,但根据ACM竞赛的特点,它们可能涉及经典的算法问题,如动态规划、贪心算法、图论、字符串处理、排序算法等。 描述中提到“已经测试过可以通过oj”,这意味着提供...
标题中的"string-problem(POJ).rar_POJ 19_poj"表明这是一个与ACM编程竞赛相关的压缩包,特别关注的是字符串处理问题。在ACM编程竞赛中,字符串问题是一个常见的类别,通常涉及到字符串的查找、比较、操作、模式匹配...
5. **字符串处理**:KMP算法、Z算法、Manacher算法等,用于高效地处理字符串匹配问题。 6. **数学应用**:组合数学、数论、模运算、动态规划中的数学思想等,ACM竞赛中数学素养的重要性不言而喻。 7. **编码技巧**...
5. **字符串操作**:编程解决问题时,需要对输入的字符串进行分析、比较和转换,这通常涉及到字符串的遍历、分割、查找等基本操作。 6. **测试数据**:在编程竞赛中,测试数据用于验证程序的正确性,包括边界情况、...
4. poj_1080.c - "Multiplication Table":该题要求生成乘法表,是基础的字符串处理和循环控制的应用,适合巩固基础知识。 5. poj_1002.c - "Addition":这是最基础的加法问题,虽然简单,但却是所有计算的基础,...
【标题】"POJ100题_C++_源码" 涉及的是C++编程语言在解决算法竞赛中的应用,尤其是针对POJ(Programming Online Judge)平台上的编程题目。POJ是一个在线的编程练习系统,它提供了一系列的算法问题供用户练习,提升...
### POJ水题代码(C++)请合理使用 #### POJ 1000:简单加法 **知识点:** 1. **基本输入输出操作:**本题主要涉及到基础的输入输出,通过`Readln(a,b);`读取两个整数,并通过`Writeln(a+b);`输出它们的和。 2. **...
5. **1008** - 可能是一个简单的字符串处理题目,比如字符串翻转等。 6. **3299** - 可能是一个关于递归或迭代的应用题,帮助理解递归的基本概念。 7. **2159** - 可能涉及简单的贪心算法应用。 8. **2739** -...
根据提供的文件信息,我们可以从中...以上四个题目覆盖了不同的编程技巧和算法思想,如条件判断、循环结构、数学计算及字符串操作等。对于初学者来说,这些题目不仅能够帮助他们巩固基础知识,还能提升解决问题的能力。
总的来说,"POJ1035 - Spell checker"不仅是一道编程题目,也是一次对字符串处理、错误检测、算法设计和实现能力的综合检验。参与这样的练习有助于提升编程技能,特别是对于解决实际问题和优化性能的思考。通过阅读...
【标签】"POJ 1159 Palindrome" 标签明确了这是关于回文的一个问题,回文是指正读反读都能读通的字符串,例如"madam"或"12321"。在编程中,回文的检测是字符串处理的基本操作,常常涉及字符串反转和比较。 **知识点...
《POJ1016-Numbers That Count:深入解析字符串处理》 在编程竞赛的世界里,北京大学的在线判题系统POJ(Problem Online Judge)是一个备受程序员喜爱的平台。其中,POJ1016“Numbers That Count”是一个涉及字符串...
5. **字符串处理**:KMP算法、Boyer-Moore算法、Rabin-Karp算法等字符串匹配方法。 6. **位运算**:利用位运算进行高效计算,如快速幂、异或操作等。 7. **优化技巧**:如代码优化、内存管理、预处理指令、递归...
【标签】"c语言100题"表明这个压缩包的内容是关于C语言编程的实践题目,涵盖了C语言的基础语法、控制结构、函数、指针、数组、字符串、结构体等核心概念。通过解答这些题目,学习者可以巩固理论知识,提高实际编程...
这些编号通常对应着POJ上的题目ID,每个ID后面可能代表一个特定的算法或编程问题,如排序、搜索、图论、动态规划、字符串处理、数学问题等。具体到每一个题目,其可能涉及的知识点包括: 1. **基础数据结构**:数组...
3. **字符串处理**:KMP算法、Rabin-Karp算法、Manacher's Algorithm等。 4. **数学应用**:模运算、数论、组合数学、图论等。 5. **递归与分治**:递归解决问题的技巧,分治策略的应用。 6. **动态规划优化**:...
例如,T071题可能需要理解并实现栈的特性来解决回文字符串检测,T075题可能需要运用队列进行广度优先搜索,而T097题可能涉及到图的深度优先搜索或最短路径算法。通过这些题目,学生能够深入理解数据结构的原理,并...
- (poj3349, poj3274, POJ2151, poj1840, poj2002, poj2503):字符串操作算法,如哈希函数的使用、模式匹配算法等。 4. **集合和映射**: - (poj3253):探讨如何高效地进行元素插入、删除及查找等操作。 5. **...
- "字符串处理"可能包括模式匹配、字符串操作等。 - "数论"可能涉及到素数检测、最大公约数、最小公倍数等问题。 - "数据结构"可能涵盖数组、链表、栈、队列、树、图、哈希表等多种结构。 对于初学者来说,研究这些...