即使增加了变量的值,它在while循环中也不会改变

时间:2019-01-02 16:40:21

标签: c

    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    int main()
    {
    char s[] = "We promptly judged antique ivory buckles for the next prize";

    for(int i=0;i<strlen(s);i++)
    {
        s[i] = tolower(s[i]);
    }
    int i=0;
    int n=1;
    int counter =0;
    char *s1;
    s1=(char*)malloc(sizeof(char)*n);
    s1[0] = s[0];

    int k=0;
    while(s[i]!='\0')
    {

            for( k=0;k<strlen(s1);++k)
            {
                if(s[i] == s1[k] && s[i] !=' ')
                ++counter;


            }
            if(counter==0 && s[i]!=' ' )
            {
                ++n;

              s1 = realloc(s1, sizeof(char) * (n));
              ++k;
              printf("%d :  %d\n",n,k);
              s1[k] = s[i];
            }


        ++i;
        counter =0;
        k=0;
    }
    s1 =realloc(s1 , sizeof(char)*(n+1));
    s1[n] = '\0';
    printf("%s\n",s1);

    if(n == 26)
    printf("yes");
    else
    printf("No");

    return 0;
}

该程序试图检查单词是否为pangram。 如果从数组s中不重复字母,则从数组s中获取一个字母并将其存储在数组s1中。因此,如果while循环结束后数组s1的长度为26,则它具有所有可能的字母。 但是,当我尝试打印s1数组时,它显示只有w具有它的内容。 迷茫到极致...

1 个答案:

答案 0 :(得分:0)

不需要您的++k(在if语句内),将其删除即可使用:

    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    int main()
    {
    char s[] = "We promptly judged antique ivory buckles for the next prize";

    for(int i=0;i<strlen(s);i++)
    {
        s[i] = tolower(s[i]);
    }
    int i=0;
    int n=2;
    int counter =0;
    char *s1;
    s1=(char*)malloc(sizeof(char)*n);
    s1[0] = s[0];
    s1[1]='\0';

    int k=0;
    while(s[i]!='\0')
    {

            for( k=0;k<strlen(s1);++k)
            {
                if(s[i] == s1[k] && s[i] !=' ')
                    ++counter;

            }

            if(counter==0 && s[i]!=' ' )
            {
                ++n;

              s1 = realloc(s1, sizeof(char) * (n));
              /* ++k; */  /* <== REMOVE IT */
              printf("%d :  %d\n",n,k);
              s1[k] = s[i];
              s1[k+1]='\0';
            }


        ++i;
        counter =0;
        k=0;
    }
    s1 =realloc(s1 , sizeof(char)*(n+1));
    s1[n] = '\0';
    printf("%s\n",s1);

    if(n == 26)
    printf("yes");
    else
    printf("No");

    return 0;
}

kfor语句的末尾已经增加,因此以后的++k是导致错误结果的原因。同样,s1应该初始化为NULL终止,并应NULL终止在if语句中,因为没有s1可能包含垃圾。 / p>