2014-02-23 51 views
0

EG-Identyfying前缀后缀

maabcma是有效的,因为它包含MA作为一个适当的前缀,以及适当的后缀。 panaba不是。

如何判断一个单词在C语言中是否有效?

我不擅长字符串操作。所以,请帮助我一个伪代码。

在此先感谢。

我完全失去了。 T =测试用例的数量。

编辑:新的代码。我最好的代码,使远

#include<stdio.h> 
#include<string.h> 

void main() 
{ 

int i,T,flag=0; 
int j,k,len=0; 
char W[10],X[10]; 

scanf("%d",&T); 

for(i=0;i<T;i++) 
{ 
scanf("%s",W); 

for(len=0;W[len]!='\0';len++) 
X[len]=W[len]; 
X[len]='\0'; 


for(j=len-1;j>=0;j--) 
for(k=0;k<len;k++) 

{ 
if(X[k]!=W[j]) 
flag=0; 

else if((j-k)==(len-1)) 
flag==1; 

} 


if (flag == 1) 
printf("NICE\n"); 
else 
printf("NOT\n"); 
} 
} 

仍然没有得到正确的结果。我哪里错了?

+2

没有人会帮助你。简单的规则,首先帮助你的自我。 – haccks

+0

向我们展示你到目前为止尝试过什么? – pkacprzak

+1

嗯。为什么?我已经看到人们竭尽全力在这里互相帮助。因为通过这样做,即使他们是专家,他们也会学习一件或另一件事。 – user3342486

回答

0

的事情是你只设置标志的值是否存在匹配,否则,您必须将其设置为0,因为看到的,如果我有:

pammbap

我的前缀是pam和后缀是bap

根据最终的循环,

pa匹配等等标志设置为1

但是当涉及到bm它不会变成零。因此,它返回true。

0

首先,void对于main不是有效的返回类型,除非您正在为Plan 9开发。

其次,您应该养成检查返回值scanf()以及所有输入函数的习惯。如果用户未输入数字,则不能依赖T的值,因为T未初始化。在同一张纸条上,您不应使用scanf无限制的%s扫描操作。如果用户输入20个字符,这不适合您拥有的十个字符缓冲区。另一种方法是使用fgets一次获取整行文本,或者使用有界扫描操作。如果您的阵列适合10个字符(包括空终止符),那么您可以使用scanf("%9s", W)

第三,单字符变量名通常很难理解。而不是W,请使用word而不是T,请使用testCount或类似的东西。这意味着有人第一次查看您的代码可以更轻松地确定每个变量的用途。

最重要的是,想想你的头脑中的过程,也许记在纸上。你将如何自己解决这个问题?作为一个例子,从Ñ = 1,

  1. 拍摄第一Ñ字符从字符串。
  2. 比较它最后ñ字符从字符串
  3. 他们是否匹配?
    1. 如果是,则打印出第一个n个字符作为后缀并停止处理。
    2. 如果否,则增量n并重试。尝试到n位于字符串的中间。

还有一些其他的事情要考虑,以及,你想要的最大比赛?例如,在输入字符串ababcdabab中,前缀ab也是后缀,但关于abab也可以这样说。在这种情况下,你不想停止处理,即使你找到一个前缀,你也想继续处理,所以,你应该只存储最大的前缀长度也是后缀。

第二重要的是,在学习C时碰到这样的障碍是非常常见的,所以不要让这对你的热情产生影响,只是不断尝试!

+0

谢谢你试图让我明白。但我很困难。我知道我非常接近。请告诉我我的代码在哪里出错。 – user3342486