LINUX.ORG.RU

Програмка на С


0

0

Подскжите как написать программу которая удаляет из одной строки все символы содержащиеся в другой.
Почему не работает эта?

#include <stdio.h>
main()
{
char s[15];
char o[10];

scanf("%s",&s);
scanf("%s",&o);
squeeze(s,o);
printf("%s\n",s);
}
squeeze(char s1[],char s2[]){
int i,j,k;

for(i=0;s2[i]!='\0';i++)
for(j=k=0;s1[j]!='\0';j++)
if (s2[i]!=s1[j])
s1[k++]=s1[j];
s1[++k]='\0';
}

anonymous

По меньшей мере ошибка в том, что ты ставишь в s1 нули где попало.
Нужно так (если не пытаться оптимизировать):
for (i=0;s2[i];i++)
for (j=0;s1[j];j++)
if (s1[j] != s2[i])
memmove (s1+j, s1+j+1, strlen(s1+j));

Murr ★★
()
Ответ на: комментарий от Murr

нет а как без memmove и strlen?
по типу такого...
for ( i = j = 0; s[i] != '\0'; i++)
   if ( s[i] != c )
   s[j++] = s[i];
   s[j] = '\0'; }
только эта прога удаляет символ c

anonymous
()

а перед main(), не надо разве объявить squeeze(char s1[],char s2[])?

anonymous
()

#include <stdio.h>

char a[] = "yrt";
char b[] = "qwertyuiopasdfghjklzxcvbnm";

main()
{
  char* tmp, *p, *ptmp;
  int i;
  
  tmp = (char*)malloc(strlen(b) + 1);
  for(p = b, ptmp = tmp; *p; p++)
   {
     if(!strchr(a, *p))
       *ptmp++ = *p;
   }
  *ptmp = 0;
  strcpy(b, tmp);
  free(tmp);
  fprintf(stderr, "a:%s\nb:%s\n", a, b);
}

linux_man
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.