Найти в строке слова, которые содержат все буквы слова - C (СИ)
Формулировка задачи:
Дана строка символов, состоящая из слов, и слово. Разделители - пробелы. Найти в строке слова, которые содержат все буквы слова.
Подскажите, как в цикле организовать проверку? Или в этой задаче нужно использовать функции strstr (strchr)?
int main()
{
char s[100],x1[10];
char *ptr,*p;
int k,length,i,j,c;
size_t w=0;
puts("Enter a string:" );
gets(s);
puts("Enter the world:" );
gets(x1);
w=strlen(x1);
ptr=strtok(s," ");
while(ptr)
{
.....
ptr=strtok(NULL," ");
}Решение задачи: «Найти в строке слова, которые содержат все буквы слова»
textual
Листинг программы
//цикл проверки букв тестового слова в очередном из строки
for(i=0;i<w; i++)
{
if( strchr(ptr,x1[i])==NULL ) break; //символ не найден в слове
}
if( i == w ) //все буквы тестового слова присутствуют в очередном слове из строки
printf("\n%s",ptr);// печатаем подходящее под условие слово
Объяснение кода листинга программы
В представленном коде выполняется следующая последовательность действий:
- Начальная инициализация:
- В переменной
wхранится количество букв в тестовом слове. - Переменная
iинициализируется нулем и будет использоваться в качестве счетчика. - Переменная
ptrсодержит строку, в которой необходимо найти слово, содержащее все буквы тестового слова. - В переменной
x1хранится тестовое слово.
- В переменной
- Цикл проверки букв тестового слова в очередном из строки:
- Цикл начинается с проверки
if(strchr(ptr,x1[i])==NULL). Эта функция ищет первый символ из строкиx1[i]в строкеptr. Если этот символ не найден, то цикл прерывается с помощью оператораbreak. - Если условие
ifне выполняется, то это означает, что текущий символ из тестового слова найден в строкеptr. Значит, цикл продолжает работу.
- Цикл начинается с проверки
- Окончание цикла и вывод результата:
- Если цикл не был прерван оператором
break, то это означает, что все буквы тестового слова найдены в строкеptr. В этом случае выполняетсяprintf(\n%s,ptr);, и на экран выводится найденное слово. Таким образом, данный код выполняет поиск в строкеptrслов, содержащих все буквы тестового словаx1. При этом найденное слово выводится на экран.
- Если цикл не был прерван оператором