在anagram程序中找不到错误
问题描述:
我无法找到下面的anagram程序中的错误。在anagram程序中找不到错误
#include<stdio.h>
#include<string.h>
#include<malloc.h>
int is_anagram(char* s1, char* s2){
int i;
char count[256] = {0};
if(NULL == s1 || NULL == s2) return 0;
for(i = 0; (s1[i] && s2[i]); i++){
count[s1[i]]++;
count[s2[i]]--;
}
if(s1[i] && s2[i]) return 0;
for(i = 0; i < 256; i++)
if(count[i]) return 0;
return 1;
}
int main(){
int i;
char* cases = malloc(10);
char* str = malloc(500000);
char* str1;
char* str2;
if(NULL == cases || NULL == str) return 0;
fgets(cases,10,stdin);
for(i = 0; i < atoi(cases); i++){
fgets(str,500000,stdin);
str1 = strtok(str," ");
str2 = strtok(NULL," ");
if(NULL == str1 || NULL == str2){
printf("\nNO");
return 0;
}
if(is_anagram(str1,str2)){
printf("\nYES");
}
else{
printf("\nNO");
}
}
free(str);
return 0;
}
我试图验证输入的数字是否是一个anagram或不。
我输入查询3串findour其是否字谜与否
I/P: ABC美国广播公司 - 是 ABC BA - NO A1B2C3 ABC123 - YES
我不能让正确的O/P为一些I/P的像第二个字符串与很多空格。 如何优化这进一步
答
目前,这条线是无用的(始终为false):
if(s1[i] && s2[i]) return 0;
什么你大概的意思是:
if(s1[i] || s2[i]) return 0;
而且,您的代码使用的可能性由于您使用带符号的字符作为数组索引,所以在您的count
数组中使用负数索引。然而,在正常的ASCII输入中,你没问题。
你为什么认为它效率不高?哪些具体的代码? – SMA 2014-12-06 11:57:24
为什么你想优化不正确的代码? – luk32 2014-12-06 12:01:33
如果它没有为某些输入生成正确的结果,也许应该在调试器下运行它,以便处理其中一个失败的输入。 – 2014-12-06 12:35:46