坚持比较C中的字符串

时间:2018-01-24 16:55:21

标签: c string file

所以我应该写一个Soundex转换器代码并打印文件中的行,如果它的一个单词与输入有相同的Soundex代码。我成功地为Soundex转换编写了一个函数但是我坚持在比较部分。很抱歉,如果这听起来微不足道,但是当我逐行比较单词时,strcmp似乎每次都失败了。这是代码......对不起,如果太长了

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

    char *soundex(char *s,char* name)
    {
        int si = 1;
        char c;
        //char *s = (char *)malloc(1000);
        //                 ABCDEFGHIJKLMNOPQRSTUVWXYZ
        char mappings[] = "01230120022455012623010202";

        s[0] = toupper(name[0]);

        for(int i = 1, l = strlen(name); i < l; i++)
        {
            c = toupper(name[i]) - 65;

            if(c >= 0 && c <= 25)
            {
                if(mappings[c] != '0')
                {
                    if(mappings[c] != s[si-1])
                    {
                        s[si] = mappings[c];
                        si++;
                    }

                    if(si > 3)
                    {
                        break;
                    }
                }
            }
        }

        if(si <= 3)
        {
            while(si <= 3)
            {
                s[si] = '0';
                si++;
            }
        }

        //printf("%s\n",s);
        return s;

    }

    void search(char line[10000],char str[1000])
    {   
        int i,j=0;
        char test[1000];
        char s[1000];
        char b[1000];
        for(i=0;line[i] != '\0';i++)
        {   
            if(line[i] == ' ')
            continue;

            test[j] = line[i];
            j++;
            if(line[i+1] == ' ' || line[i+1] == '\0')
            {
                //soundex(test);
                test[j] = '\0';

                if(strcmp(soundex(s,test),soundex(b,str)) == 0);
                {
                    printf("%s\n",soundex(s,test));
                    printf("%s\n",soundex(b,str));
                    printf("%s",line);
                    break;
                }
                j = 0;
                memset(test,0,strlen(test));
            }

        }
    }

    int main()
    {

        char a[1000],f[1000];
        char s[1000];
        gets(a);
        //soundex(s,a);
        //printf("%s",s);

        scanf("%s",f);
        FILE *fp=fopen(f,"r");
        if(fp==NULL)
        {
            printf("File doesnot exist bro");
        }
        else
        {
            long long linenum=1;
            char line[10000];
            while(fgets(line,10000,fp)!=NULL) //Or fscanf
            {
                search(line,a);
                //printf("%s",line);
                linenum++;
            }
        }

        fclose(fp);
     }

问题出现在搜索功能中的strcmp命令,因为即使在结果不同之后它也会打印行。我甚至打印后的比较结果以确定。任何线索都会受到重视。再次抱歉长码。

1 个答案:

答案 0 :(得分:1)

关闭;不要忽略编译器警告!

prog.c:70:17: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
                     if(strcmp(soundex(s,test),soundex(b,str)) == 0);


if(strcmp(soundex(s,test),soundex(b,str)) == 0)

prog.c: In function ‘search’:
prog.c:68:25: warning: statement with no effect [-Wunused-value]
                 test[j] == '\0';

prog.c: In function ‘main’:
prog.c:89:9: warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration]
         gets(a);