Найти все слова, содержащие заданную подстроку - C (СИ)
Формулировка задачи:
Задача: найти все слова, содержащие заданную подстроку, и вывести..
Эта программа работает. Однако имеется небольшая (а может и большая) косость - я работаю с глобальным A[]. Как передать указатель на него в функцию, объявив массив в Main?
Заранее спасибо.
#include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> char A[6][80],s[80],f[80]; int i,j,a=0,max=0,c=0; void Find(int iStart,int iEnd,int iLine) { char *p=&A[iLine][iStart]; memset(f, 0, sizeof(f)); strncpy(f,p,iEnd-iStart); if(strstr(f,s)!=0) printf("%s\n",f); } int main() { printf("Enter number of strings: "); scanf("%d",&c); printf("Enter word: "); scanf("%s",s); for(i=0;i<c;i++) { printf("Enter %d string (max 80): ",i+1); getchar(); gets(A[i]); } for(i=0;i<c;i++) { a=0; for(j=1;j<80;j++) { if(A[i][j]==' ') { Find(a,j,i); a=j+1; } if(A[i][j]=='\0') { Find(a,j,i); break; } } } getch(); }
Подскажите пожалуйста
Решение задачи: «Найти все слова, содержащие заданную подстроку»
textual
Листинг программы
#include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> //void Find(int iStart, int iEnd, int iLine) void Find(char* p, unsigned length, char* f, char* s) { //char* p = &A[iLine][iStart]; //memset(f, 0, sizeof(f)); //strncpy(f,p,iEnd-iStart); strncpy(f, p, length); f[length] = '\0'; if (strstr(f, s) != 0) { printf("%s\n", f); } } int main() { char A[6][80], s[80], f[80]; int i, j, a = 0, c = 0; printf("Enter number of strings: "); scanf("%d", &c); printf("Enter word: "); scanf("%s", s); for (i = 0; i < c; i++) { printf("Enter %d string (max 80): ", i + 1); getchar(); gets(A[i]); } for (i = 0; i < c; i++) { a = 0; for (j = 1; j < 80; j++) { if (A[i][j] == ' ') { //Find(a, j, i); Find(&A[i][a], j-a, f, s); a = j + 1; } if (A[i][j] == '\0') { //Find(a, j, i); Find(&A[i][a], j-a, f, s); break; } } } getch(); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
, , , , . - Определяется функция
Find
, которая принимает три аргумента:int iStart, int iEnd, char* p
. - Внутри функции
Find
выполняется следующее: a.char* p = &A[iLine][iStart];
- инициализируется указательp
на строку в массивеA
с заданными индексамиiLine
иiStart
. b.memset(f, 0, sizeof(f));
- буферf
очищается нулями. c.strncpy(f,p,iEnd-iStart);
- в буферf
копируется подстрока изp
длинойiEnd-iStart
. d.f[length] = '\0';
- в конец строки в буфереf
добавляется нулевой символ. e. Если подстрока содержит заданную подстрокуs
, то выводится на экран содержимое буфераf
. - В функции
main
объявляются переменные:char A[6][80], s[80], f[80];
,int i, j, a = 0, c = 0;
. - Пользователю предлагается ввести количество строк и слово для поиска.
- В цикле происходит ввод строк с помощью функции
gets(A[i])
. - В цикле происходит поиск подстрок, содержащих заданное слово, в каждой строке массива
A
. - Если подстрока найдена, то вызывается функция
Find
, передавая ей указатель на начало подстроки, длину подстроки и указатель на буфер, в который будет скопирована найденная подстрока. - После завершения поиска выводится сообщение об успешном завершении программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д