Напишите функцию any(s1, s2), которая возвращает либо ту позицию в s1, где стоит первый символ, совпавший с любым из символов в s2, либо -1 (если ни один символ из s1 не совпадает с символами из s2).
(Стандартная библиотечная функция strpbrk делает то же самое, но выдает не номер позиции символа, а указатель на символ.)
#include <stdio.h>
#define MAXLINE 1000
int getstr(char line[], int maxline);
int any(char s1[], char s2[]);
int main(void)
{
char s1[MAXLINE];
char s2[MAXLINE];
int len;
int pos;
printf("Введите строку s1:\n");
while ((len = getstr(s1, MAXLINE)) == 0)
;
printf("Введите строку s2:\n");
while ((len = getstr(s2, MAXLINE)) == 0)
;
pos = any(s1, s2);
printf("Позиция первого совпавшего символа %d\n", pos);
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; /* функция возвращает длину строки */
}
/* any: возвращает либо ту позицию в s1, где стоит первый символ, совпавший с любым символом в s2,
* либо -1 (если ни один символ из s1 не совпадает с символами из s2) */
int any(char s1[], char s2[])
{
int i, j;
/* Перебор символов, совпадение которых пытаемся найти (массив s1) */
for (i = 0; s1[i] != '\0'; i++)
{
/* Перебор символов, совпадение с которыми пытаемся найти (массив s2) */
for (j = 0; s2[j] != '\0'; j++)
{
/* сравнение символов +
* исключение символа новой строки ('\n'), так как он есть в обоих массивах */
if (s1[i] == s2[j] && s1[i] != '\n')
{
printf("debug info i:%d\tj:%d\ts1[i]:%c\ts2[j]:%c\n", i, j, s1[i], s2[j]);
return i;
}
}
}
return -1; /* если ни один символ из s1 не совпадает с символами из s2 */
}
qwerty
Введите строку s2:
e
debug info i:2 j:0 s1[i]:e s2[j]:e
Позиция первого совпавшего символа 2
qwerty
Введите строку s2:
pass
Позиция первого совпавшего символа -1
(Стандартная библиотечная функция strpbrk делает то же самое, но выдает не номер позиции символа, а указатель на символ.)
$ vim any.c
#include <stdio.h>
#define MAXLINE 1000
int getstr(char line[], int maxline);
int any(char s1[], char s2[]);
int main(void)
{
char s1[MAXLINE];
char s2[MAXLINE];
int len;
int pos;
printf("Введите строку s1:\n");
while ((len = getstr(s1, MAXLINE)) == 0)
;
printf("Введите строку s2:\n");
while ((len = getstr(s2, MAXLINE)) == 0)
;
pos = any(s1, s2);
printf("Позиция первого совпавшего символа %d\n", pos);
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; /* функция возвращает длину строки */
}
/* any: возвращает либо ту позицию в s1, где стоит первый символ, совпавший с любым символом в s2,
* либо -1 (если ни один символ из s1 не совпадает с символами из s2) */
int any(char s1[], char s2[])
{
int i, j;
/* Перебор символов, совпадение которых пытаемся найти (массив s1) */
for (i = 0; s1[i] != '\0'; i++)
{
/* Перебор символов, совпадение с которыми пытаемся найти (массив s2) */
for (j = 0; s2[j] != '\0'; j++)
{
/* сравнение символов +
* исключение символа новой строки ('\n'), так как он есть в обоих массивах */
if (s1[i] == s2[j] && s1[i] != '\n')
{
printf("debug info i:%d\tj:%d\ts1[i]:%c\ts2[j]:%c\n", i, j, s1[i], s2[j]);
return i;
}
}
}
return -1; /* если ни один символ из s1 не совпадает с символами из s2 */
}
$ cc -g -O0 -Wall -o a.out any.c
$ ./a.outВведите строку s1:
qwerty
Введите строку s2:
e
debug info i:2 j:0 s1[i]:e s2[j]:e
Позиция первого совпавшего символа 2
$ ./a.outВведите строку s1:
qwerty
Введите строку s2:
pass
Позиция первого совпавшего символа -1
Комментариев нет:
Отправить комментарий