Архив метки: предожение

Строки в С++ Листинг программы

Тема: Строки

Задание: :  В 2-х предложениях найти и распечатать совпадающие слова.

Листинг

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>

#define N 20

  //  ПРЕДВАРИТЕЛЬНОЕ ОБЪЯВЛЕНИЕ ФУНКЦИЙ
  // Заголовок программы
      void Title();
  // Ввод предложения
      void InpPredl (char predl[]);
  // Ввод предложения
    void InpPredl(char predl[]);
      // Ввод предложения
    void InpPredl2(char predl[]);
  // Выделение из предложения
     void Select(const char *predl, char m[][N],char *sel, int *n);
  // Поиск повторов слов
     void FindDuplicate(char slova[][N], char slova2[][N], int sl, int rz);
  // Вывод результата
     void OutPredl(char *s1, char *s2);

inline void rus()  // Русификация вывода в консольное окно
{
    //setlocale( LC_CTYPE, ".1251" );
    //setlocale( LC_MONETARY, ".1251" );
    setlocale( LC_ALL, "" );
}

// ОСНОВНАЯ ФУНКЦИЯ
int main()
{
     // ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
  char predl[80];    // Введенное предложение
  char predl2[80];    // Введенное предложение
  char *res;            // Результирующее предложение
  char slova[N][N]; // Массив слов в предложении
  char slova2 [N][N]; // Массив 2 слов в предложении
  int  sl=-1, rz=-1;  // Счетчики слов
  char buk[80]; // все буквы алфавита
  char *bs="йцукенгшщзхъфывапролджэячсмитьбю";// Буквы строчные
  char *bz ="ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";/*  заглавные */
  char *r="`!;:,.?- _";         // Разделительные знаки
//ВЫЗОВ ФУНКЦИЙ НА ИСПОЛНЕНИЕ
    rus();
// Заголовок программы
       Title ();
  // Ввод предложения
       InpPredl(predl);
       InpPredl2(predl2);
  // Выделение из предложения слов
      Select (predl, slova, r, &sl);
      Select (predl2, slova2, r, &rz);

       FindDuplicate(slova, slova2, sl, rz);

    return 0;
}

// ОПИСАНИЕ ИСПЛЬЗУЕМЫХ ФУНКЦИЙ
// Заголовок программы
void Title()
{
  char s[1000];
  AnsiToOem(" Задание\n",s);
  puts (s);

}
// Ввод предложения
void InpPredl(char *s)
{
    char s2[50];
    AnsiToOem("Введите предложение \n",s2);
    puts(s2);
  strcpy (s,"Верите ли вы, что задача решена?");
  // gets (s);
}
void InpPredl2(char *s)
{
    char s2[50];
    AnsiToOem("Введите предложение \n",s2);
    puts(s2);
  strcpy (s,"Верите ли вы, во что нибудь?");
 // gets (s);

}

// Выделение из предложения
void Select(const char *predl, char m[][N], char *sel, int *n)
{
  char *p, *s;

  s=strdup (predl); // Сделать копию исходного предложения
	// так как передается константа, strtok требует
	// внесения изменений при своей работе
  p = strtok (s, sel);
  while (p)
    {
     (*n)++;
     strcpy (m[*n],p);
     p = strtok (NULL, sel);
    }
  free (s);
}
/ Сравнение слов
void FindDuplicate(char slova[][N], char slova2[][N], int sl, int rz)
{
  int i, j;
  char buk[80];
   i = sl; //кол во слов в 1 массиве слов
AnsiToOem("Повторы ",buk);
            puts (buk);



  while (i>=0)
    {
     for(j=0;j< =rz;j++)
      if (!strcmp(slova[i],slova2[j])) {
            AnsiToOem(slova[i],buk);
            puts (buk);
                                } // Печать слова
      i--;
    }

}