Поиск слова в строке - C (СИ)
Формулировка задачи:
Добрый день.
Ни как не могу сделать программу чтобы работала для двумерного массива,
работает только для одной первой строки.
задание: если введенное слово найдено в строке то выводится сообщение что слово найдено если не то это слово вставляется после второго слова и так для каждой строки.
заранее благодарен.
#include <stdio.h>
#include <string.h>
#define MAX 11
#define LEN 80
#define B ' '
char text[MAX][LEN] ,word[LEN], *pch, e[LEN];
int main(int argc, char* argv[])
{
register int t, i, j;
printf("Eter text.\n");
for(t=0; t<MAX; t++) {
printf("%d: ", t);
gets(text[t]);
}
for(i=0; i<t; i++) {
for(j=0; text[i][j]; j++) putchar(text[i][j]);
putchar('\n');
}
printf("Enter word.\n");
gets (word);
if (strstr(text[i],word) != NULL)
printf("The word \"%s\" found\n",word);
else pch = strchr (*text , B ) ;
if ( pch )
pch = strchr ( pch + 1 , B ) ;
if ( pch )
{
strcpy ( e, pch + 1 ) ;
strcpy (pch+1,word);
strcat (*text," ");
strcat (*text,e);
}
printf (" Result : %s", text);
putchar ('\n');
return 0;
}Решение задачи: «Поиск слова в строке»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#define MAX 5
#define LEN 256
int main()
{
char str1[MAX][LEN] = { 0 };
for (int z = 0; z < MAX; z++)
{
printf("Enter string %d: ",z+1);
gets(str1[z]);
}
static char sw[LEN] = "\0";
printf("\nEnter a word: "); gets(sw);
printf("\n");
for (int i = 0; i < MAX; i++)
{
if (!strstr(str1[i], sw))
{
int d = 0; int count = 0;
while (str1[i][d] != '\0' && count < 2)
if (isspace(str1[i][d++])) count++;
int len = strlen(sw) + 1;
while (--len >= 0)
{
for (int q = strlen(str1[i])-1; q >= d-1; q--)
str1[i][q+1] = str1[i][q];
}
for (int n = 0; sw[n] != '\0'; n++)
str1[i][n+d] = sw[n];
printf("%s - \"%s\" word inserted\n",str1[i],sw);
continue;
}
printf("%s - \"%s\" word found\n",str1[i],sw);
}
_getch();
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Объявление массива строк и его заполнение с помощью функции
gets(). - Ввод искомого слова с помощью функции
gets(). - Проверка наличия искомого слова в каждой строке массива с помощью функции
strstr(). Если слово не найдено, выполняется следующий блок кода: - Инициализация переменных
dиcountдля обработки пробелов в строке. - Удаление пробелов в строке с помощью цикла
while. - Определение длины искомого слова и его добавление в конец строки с помощью цикла
while. - Копирование символов искомого слова в соответствующую позицию в строке с помощью цикла
for. - Вывод сообщения об успешном добавлении слова в строку.
- Если слово найдено, выводится соответствующее сообщение.
- В конце программы используется функция
_getch()для приостановки выполнения программы до нажатия клавиши. - Возврат значения 0, что означает успешное завершение программы.