Написать функцию, которая ищет в строке s1 любой символ из строки s2 - C (СИ)
Формулировка задачи:
Написать функцию, которая ищет в строке s1 любой символ из строки s2 (char *strpbrk(char *s1, char *s2).
Сам пробовал, ответ не правильно выдает((( Помагите пожалуйста)
вот:
#include<stdio.h>
char *strpbrk(char *s1, char *s2)
{char *rs;
rs=s1; s1--;
while(*s1!='\0')
{s1++;
while(*s2!='\0')
{if(*s1!=*s2)
*rs=' ';
rs++;
s2++;
}}
*s1='\0';
*rs='\0';
puts(rs);
return rs;
}
main()
{char str1[30], str2[30];
puts("Vvedite 2 stroki");
gets(str1);
gets(str2);
if(strlen(str1)+strlen(str2)<30)
{puts(strpbrk(str1,str2));
puts("simvoli iz stroki s1");
puts(str1);
}
else puts("simvolov net") ;
}Решение задачи: «Написать функцию, которая ищет в строке s1 любой символ из строки s2»
textual
Листинг программы
#include <stdio.h>
char *
__strpbrk(const char *s, const char *accept)
{
int i, j;
for(i = 0; s[i] != '\0'; i++)
for(j = 0; accept[j] != '\0'; j++)
if(s[i] == accept[j])
return (char *) s + i;
return NULL;
}
int
main(void)
{
char s[] = "hello, world!";
char accept[] = "abcde";
char *p = __strpbrk(s, accept);
if(p != NULL) {
printf("Найдено вхождение %c в позиции %d\n", *p, p - s + 1);
} else {
printf("Вхождений не найдено.\n");
}
return 0;
}
Объяснение кода листинга программы
- Включаем файл стандартного ввода/вывода
- Создаем функцию __strpbrk, которая принимает два аргумента: s - строка, в которой ищется символ, и accept - строка, символы которой нужно искать в s.
- Внутри функции объявляем две переменные i и j, которые будут использоваться в циклах.
- В первом цикле перебираем все символы строки s, используя символ под индексом i.
- Во втором цикле перебираем все символы строки accept, используя символ под индексом j.
- Если символы s[i] и accept[j] совпадают, то возвращаем указатель на символ в строке s, который совпадает с символом из строки accept.
- Если символы не совпадают, то продолжаем перебор символов.
- Если все символы из строки accept не найдены в строке s, то возвращаем NULL.
- В функции main создаем строки s и accept, которые будут использоваться в качестве аргументов для функции __strpbrk.
- Вызываем функцию __strpbrk, передавая ей в качестве аргументов строки s и accept.
- Полученный результат сохраняем в переменной p.
- Если p не равно NULL, то выводим сообщение о том, что найдено вхождение символа из строки accept в позиции s, иначе выводим сообщение о том, что вхождений не найдено.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.