Поиск слова в строке - 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;
}

Объяснение кода листинга программы

В этом коде выполняется следующая последовательность действий:

  1. Объявление массива строк и его заполнение с помощью функции gets().
  2. Ввод искомого слова с помощью функции gets().
  3. Проверка наличия искомого слова в каждой строке массива с помощью функции strstr(). Если слово не найдено, выполняется следующий блок кода:
  4. Инициализация переменных d и count для обработки пробелов в строке.
  5. Удаление пробелов в строке с помощью цикла while.
  6. Определение длины искомого слова и его добавление в конец строки с помощью цикла while.
  7. Копирование символов искомого слова в соответствующую позицию в строке с помощью цикла for.
  8. Вывод сообщения об успешном добавлении слова в строку.
  9. Если слово найдено, выводится соответствующее сообщение.
  10. В конце программы используется функция _getch() для приостановки выполнения программы до нажатия клавиши.
  11. Возврат значения 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы