Форум программистов, компьютерный форум CyberForum.ru

Поиск палиндрома в строке символов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
26.10.2012, 20:07     Поиск палиндрома в строке символов #1
Условие задачи:
1) Задан символьный массив F(N), N<=260. Найти отрезок массива максимальной длины, в котором первый символ равен последнему,
второй предпоследнему и т. д. Вывести исходный массив и длину найденного отрезка.
Например F = abacbd длина = 3, F = ababccb длина = 4
2) Далее удалить из исходного массива этот отрезок, а массив сжать. Сжатый массив напечатать.
Примечание. Если в массиве несколько максимальных отрезков, то выбирается любой из них. Дополнительных массивов не использовать.
Короче говоря, надо найти подстроку данной строки, которая является палиндромом, но при этом не использовать дополнительных массивов.
Я уже всю голову себе сломала и облазила весь интернет, вот что смогла написать:
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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
 
int pal( string f, int centr)//функция поиска палиндрома от заданного центра
{
    int left, right, search;
    bool res;
    left = centr;
    right = centr;
    while ((f[left]==f[right]) & (left>1) & (right>1))
    {
        left = left-1;
        right = right+1; //Идёи вправо и влево пока текущий левый символ совпадает с текущим правым
    }
     if (f[left]==f[right])
     {
        search = right-left+1;
        res = true; 
     }
     else search = right-left-1; 
    return 0;    
}
int main()
{
    setlocale(LC_ALL, "Russian");
    string f;
    cout<<"F = ";
    getline (cin, f);
    cout<<endl;
    int left, right, max, len, t, num; 
    len = f.length();
    bool res;
 
    if (len%2==1)//Ищем первую точку-возможный центр падиндрома. Если количество символов в строке чётно, то таких центральных точек две иначе одна
    { 
        left = len/2; 
        right = len/2; 
    } 
    else 
    {
        left = (len/2)-1; 
        right = (len/2)+1; 
    } 
    res = false; 
    max = 0;
    //{Поиск ведём до тех пор пока не дойдём до границ строки или на каком-либо шаге не будет найден максимально возможный на это шаге палиндром}
    while (res = true) 
    { 
        t = pal(f,left); //Ищем палиндром слева
        if (t > max)
        {
            max = t; 
            num = left;
        } 
        t = pal (f, right); //Ищем палиндром справа
        if (t>max) 
        { 
            max = t; 
            num = right;
        } 
 
        left = left-1;
        right = right+1; //Переходим к новым точкам
        if (left==1) 
        {
            res = true; //Дошли до границы и дальше идти некуда
        }
        for (t = num-(max-1)/2; t < num + (max-1)/2; t++)
        cout<<f[t];
    }
 
    system("pause");
    return 0;
}
Пожалуйста помогите исправить ошибки и сделать вторую часть задания
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 20:07     Поиск палиндрома в строке символов
Посмотрите здесь:

поиск символов в строке C++
C++ поиск символов в строке
C++ Поиск символов в строке
нахождение палиндрома в строке C++
C++ Поиск Палиндрома
C++ Поиск символов в строке
C++ поиск символов в строке
Поиск чисел в строке символов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
piande
3 / 3 / 0
Регистрация: 26.10.2012
Сообщений: 18
27.10.2012, 10:13     Поиск палиндрома в строке символов #2
Процедура pal(f,left) всегда возвращает 0
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
28.10.2012, 14:30  [ТС]     Поиск палиндрома в строке символов #3
Я решила проблему) Вопрос снимается.
Yandex
Объявления
28.10.2012, 14:30     Поиск палиндрома в строке символов
Ответ Создать тему
Опции темы

Текущее время: 23:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru