Ваш ++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;
}
k
уже был увеличен в конце оператора for
, поэтому позднее ++k
является причиной неверного результата. Также s1
должно быть инициализировано как NULL
прекращено, а NULL
должно быть завершено внутри оператора if
, так как без него s1
может содержать мусор.