Advertisement
Milaj

Untitled

May 17th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. //Дан текст, среди символов которого имеется пробел. Группа символов, предшествующая первому пробелу, представляет собой русское слово—
  2. //существительное мужского рода, оканчивающееся на -ок; после первого пробела идет одна из букв и, р, д, в, т, п, указывающая падеж //(именительный, родительный, дательный, винительный, творительный, предложный). Получить данное слово в указанном падеже.
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <stdio.h>
  7. #include <cctype>
  8. #include <windows.h>
  9. using namespace std;
  10. void obnul(char*str) {
  11. for (int i = 0; str[i] != '\0'; i++)
  12. str[i] = 0;
  13. }
  14. void give_padej(char padej,char *ok_padej) {
  15. if (padej == 'и') { ok_padej[0] = 'о'; ok_padej[1] = 'к'; }
  16. else if (padej == 'р') { ok_padej[0] = 'к'; ok_padej[1] = 'а'; }
  17. else if (padej == 'д') { ok_padej[0] = 'к'; ok_padej[1] = 'у'; }
  18. else if (padej == 'в') { ok_padej[0] = 'к'; ok_padej[1] = 'а'; }
  19. else if (padej == 'т') { ok_padej[0] = 'к'; ok_padej[1] = 'о'; ok_padej[2] = 'м'; }
  20. else if (padej == 'п') { ok_padej[0] = 'к'; ok_padej[1] = 'е'; }
  21. }
  22. void print_this_to_index(char *str, int index) {
  23. cout << "Программа вернула: ";
  24. for (int i = 0; i < index; i++) {
  25. cout << str[i];}
  26. cout << endl;
  27. }
  28. bool iskluchenie(char *str) {//Проверка на исключение
  29. int j = 0;
  30. for (int i = 0; str[i] != '\0'; i++) {
  31. if (str[i - 1] == 'о'&&str[i] == 'к' && (str[i - 2] == 'р' || str[i - 2] == 'к' || str[i - 2] == 'л' || str[i - 2] == 'т')) {
  32. j = 1;
  33. }
  34. }
  35. return j;
  36. }
  37. int transf_isklych(char*str, char *ok_padej, int size,bool is) {//Трансформация
  38. int j = 0,
  39. z = 0;//Чтобы входило после.
  40. for (int i = 0; i <size; ++i)
  41. {
  42. if (!is&&str[i] == 'о') {
  43. str[i] = str[i+1];
  44. z++;
  45. }
  46. if ((str[i - 1] == 'о'&&str[i] == 'к'&&str[i+1] == '\0')||z>=1) {
  47. if (str[i - 1] == ok_padej[j]) {
  48. j++;
  49. }
  50. else if (!(str[i - 1] == ok_padej[j])||!is)
  51. {
  52. str[i] = ok_padej[j]; j++;
  53. }
  54. z++;
  55. }
  56. }
  57. print_this_to_index(str, size);
  58. return 0;
  59. }
  60. void tranform_this(char *str, char *ok_padej) {//Передача на трансформацию в др. ф-и
  61. int size; char printstr;
  62. size = strlen(ok_padej)+strlen(str);
  63. if (strlen(str)==3) {
  64. cout << "Исключение: Существительное из трех букв\n";
  65. int is = 1;
  66. transf_isklych(str, ok_padej, size, is);}
  67. else if (strlen(str) > 3 && iskluchenie(str)) {
  68. cout << "Исключение: Существительное имеет кончание -рок/-кок/-лок/-ток\n";
  69. int is = 1;
  70. transf_isklych(str, ok_padej, size,is);
  71. }
  72. else {
  73. cout << "Слово не принадлежит к исключениям\n";
  74. int is = 0;
  75. transf_isklych(str, ok_padej, size,is);
  76. }
  77.  
  78.  
  79. }
  80. int main()
  81. {
  82. SetConsoleOutputCP(1251);
  83. SetConsoleCP(1251);
  84. char str[255],padej;
  85. obnul(str);//обнулить массив
  86. char ok_padej[2];
  87. obnul(ok_padej);//тоже обнулить
  88. for (int i = 0; i < 2; ++i) {
  89. if (i == 0) {
  90. cin >> str;
  91. cout << "Слово: " << str << endl;
  92. }
  93. else if (i == 1) {
  94. cin >> padej;
  95. cout << "Падеж: " << padej << endl;
  96. give_padej(padej, ok_padej);
  97.  
  98. }
  99. }
  100. tranform_this(str, ok_padej);
  101. system("pause");
  102. return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement