Напишите версию функции squeeze(s1, s2), которая удаляет из s1 все символы, встречающиеся в строке s2.
#include <stdio.h>
#define MAXLINE 1000
int getstr(char line[], int maxline);
void squeeze(char s1[], char s2[]);
int main(void)
{
char s1[MAXLINE];
char s2[MAXLINE];
int len;
printf("Введите строку s1:\n");
while ((len = getstr(s1, MAXLINE)) == 0)
;
printf("Введите строку s2:\n");
while ((len = getstr(s2, MAXLINE)) == 0)
;
squeeze(s1, s2);
printf("%s\n", s1);
return 0;
}
int getstr(char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if (c == '\n')
s[i++] = c;
s[i] = '\0'; /* в конец строки дописывам "0" */
return i; /* функция возвращает длину строки */
}
void squeeze(char s1[], char s2[])
{
int i, j, m;
/* Перебор символов в массиве из которого выполняем поиск: s2 */
for (i = 0; s2[i] != '\0'; i++)
{
/* Перебор символов в массиве в котором выполняем поиск: s1 */
for (j = 0; s1[j] != '\0'; j++)
{
/* Сравнение символов */
if (s1[j] == s2[i])
{
/* Если символ встречается, удаляем его смещением элементов массива s1
* на один влево.В переменной m запоминаем текущую позицию встретившегося символа*/
for (m = j; s1[m] != '\0'; m++)
s1[m] = s1[m + 1]; /* m++ писать нельзя, побочный эффект */
j--; /* уменьшение индекса на единицу для повторной проверки наличия символа в строке s1 */
}
}
}
}
helhelhelhhhhoooooads
Введите строку s2:
leh
oooooads
#define MAXLINE 1000
int getstr(char line[], int maxline);
void squeeze(char s1[], char s2[]);
int main(void)
{
char s1[MAXLINE];
char s2[MAXLINE];
int len;
printf("Введите строку s1:\n");
while ((len = getstr(s1, MAXLINE)) == 0)
;
printf("Введите строку s2:\n");
while ((len = getstr(s2, MAXLINE)) == 0)
;
squeeze(s1, s2);
printf("%s\n", s1);
return 0;
}
int getstr(char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if (c == '\n')
s[i++] = c;
s[i] = '\0'; /* в конец строки дописывам "0" */
return i; /* функция возвращает длину строки */
}
void squeeze(char s1[], char s2[])
{
int i, j, m;
/* Перебор символов в массиве из которого выполняем поиск: s2 */
for (i = 0; s2[i] != '\0'; i++)
{
/* Перебор символов в массиве в котором выполняем поиск: s1 */
for (j = 0; s1[j] != '\0'; j++)
{
/* Сравнение символов */
if (s1[j] == s2[i])
{
/* Если символ встречается, удаляем его смещением элементов массива s1
* на один влево.В переменной m запоминаем текущую позицию встретившегося символа*/
for (m = j; s1[m] != '\0'; m++)
s1[m] = s1[m + 1]; /* m++ писать нельзя, побочный эффект */
j--; /* уменьшение индекса на единицу для повторной проверки наличия символа в строке s1 */
}
}
}
}
$ cc -g -O0 -Wall -o a.out squeeze.c
$ ./a.outВведите строку s1:
helhelhelhhhhoooooads
Введите строку s2:
leh
oooooads
Комментариев нет:
Отправить комментарий