无法在anagram程序中找到错误

时间:2014-12-06 11:56:00

标签: c 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个字符串来查找它的anagram是否

I / P: 3 abc abc - 是的 abc ba - 没有 a1b2c3 abc123 - 是

对于某些i / p来说,我无法获得正确的o / p,就像第二个包含大量空格的字符串一样。 如何进一步优化

1 个答案:

答案 0 :(得分:0)

目前,这一行没用(总是假的):

if(s1[i] && s2[i]) return 0;

你可能意味着:

if(s1[i] || s2[i]) return 0;

此外,您的代码有可能在您的count数组中使用负索引,因为您使用有符号字符作为数组索引。在正常的ASCII输入上,你没问题。