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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Указатели http://www.cyberforum.ru/cpp-beginners/thread681315.html
Имеется массив C, состоящий из N элементов. Имеется указатель *p, который хранит в себе эти N элементов. Имеется указатель *d, в котором хранится минимальное число из предыдущего массива-указателя *p. Вопрос: как используя это, поменять местами последний элемент массива и минимальный, используя указатели? ....... int z; z=*(c+(n-1)); // записываем в переменную значение последнего...
C++ Раскладываем на цифры Доброго времени суток. Задача: Дано натуральное n. Верно ли, что равны суммы четных и нечетных цифр? Но меня мучает вопрос, что бы раскладывать число, нужно обязательно знать количество знаков? (без ввода в массив). Никак не разберусь со всеми тонкостями этого процесса. Помогите. http://www.cyberforum.ru/cpp-beginners/thread681311.html
C++ Как определить переменную только один раз?
Как в функции определить перменную только один раз? Ну чтобы потом при последующих вызовах она не переопределялась, забыл блин, там слово какое-то матерное надо было вставить, типа pam-param int x
C++ Выделение и освобождение памяти
Доброго времени суток. Пишу класс по ООП, и назрел один вопрос, связанный с моментом выделения и освобождения памяти. class SOK { public: SOK(int number); ~SOK(); void Show () const; void ChangeNumb (int Numb); SOK (const SOK &);
C++ Задание функций http://www.cyberforum.ru/cpp-beginners/thread681265.html
как задать функции?
C++ Визуализация расчетов Имеется рабочая программа на Си. В результате её работы получается текстовый файл, содержащий три координаты каждой точки XYZ. Данных много и они записаны в столбик: 1500 2300 50 1500 2350 52 1500 2400 61 Какими средствами эти результаты можно преобразовать в растр или представить в виде трехмерной поверхности? (не используя Matlab) подробнее

Показать сообщение отдельно
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53

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

26.10.2012, 20:07. Просмотров 2579. Ответов 2
Метки (Все метки)

Условие задачи:
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;
}
Пожалуйста помогите исправить ошибки и сделать вторую часть задания
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru