Тема: Строки
Задание: : В 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--;
}
}