C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| #include <iostream>
#include <locale>
#include <string.h>
#include <stdio.h>
using namespace std;
struct stroki {
char stroka[50];
stroki *next;
};
struct stroki1 {
char stroka1[50];
stroki1 *next;
stroki1 *prev;
};
void Form ( stroki **begin, stroki *C) {
*begin = new stroki ;
strcpy ((*begin)->stroka,C->stroka);
(*begin)->next = NULL;
stroki *end = *begin;
end->next = NULL;
}
void Form1 ( stroki1 **begin1, stroki1 *D, stroki1 **e1) { // записываем элементы в список в прямом порядке
*begin1 = new stroki1 ;
strcpy ((*begin1)->stroka1,D->stroka1);
(*begin1)->next = NULL;
stroki1 *end1 = *begin1;
end1->next = NULL;
}
void Print(stroki *b, stroki1 *b1 ) { // Сравнение списков и печать.
stroki *prohod = b;
stroki1 *prohod1 = b1;
while (b,b1)
{ if (prohod->stroka == prohod1->stroka1) {
cout << "Текст симметричен" << endl;
}
else { cout << " Текст несимметричен" << endl;}
break;
}
}
// char func2 { // переписывание второй половины строки в другой список задом наперед (т.е. от конца к началу), удаление второй половины строки первого списка
// ;}
//
// int func3 { // сравнение первого и второго списка, если все символы попарно равны, исключая точку, то cout << "Текст симетричен";
// ;}
int main()
{
setlocale (LC_ALL, "rus");
stroki *begin = NULL;
stroki *end = begin;
stroki1 *begin1 = NULL;
stroki1 *end1 = NULL;
char *B = new char ;
stroki *C = new stroki;
stroki1 *D = new stroki1;
cout << "Введите текст произвольной длины: " ;
cin.getline( B , 50);
//int count = 0; while (B != 0 ) {count ++; }
//int count = sizeof (B) ;
//cout << "count = " << count;
cout << "Введенный текст: " << B;
/*while (length (B) == (length (B/2) ) {
cin.getline (C->stroka, 50);
}
else cin.getline (D->stroka1,50);*/
Form ( &begin, C); // Запись первой половины массива в список1
Form1 (&begin1, D, &end1); // Запись второй половины массива в список 2 в прямом порядке
Print(begin,begin1);
system ("pause");
return 0;
} |
|
В общем, комментарии даны в коде. Мне необходимо проверить симметричность введенного текста произвольной длины. Используя 2 списка. Алгоритм в принципе не труден, но я не знаю синтаксиса( Во первых, очень хотелось бы узнать как записать половину символьного массива в один список, а другую половину в другой. И как сравнить первый список (где записана первая половина текста) с инвертированным вторым (ну то есть у него конец = началу, начало = концу, и он по видимому должен быть двусвязным). Вот что наработал, мб будут советы? Хотя бы базовые, мб конструкции посоветуете? Очень надо) Заранее всем спасибо, надеюсь проблема понятна)