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

Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Fintt
 Аватар для Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
13.11.2013, 12:59     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #1
Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. Не могу разобраться
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
 
using namespace System;
using namespace std;
 
struct Stack
      {
       char data;
       Stack *pred;
      };
typedef Stack *StackPtr;
void Push (StackPtr &top, char c);
char Pop (StackPtr &top);
///////////////////////////////////////////////
void main()
    {
     system("cls");
     char ch;
     int n,i;
     cout<<"Vvedite chislo simvolov: "; 
     cin>>n;
     cout<<"Vvedite stroky: "; 
     cin>>ch;
 
     for (i=1; i<=n; i++)
     {
 
     }
     system("pause");
    }
///////////////////////////////////////////////
void Push (StackPtr &top, char c)
    {
     StackPtr tmp=new Stack;
     tmp->data=c;
     tmp->pred=top;
     top=tmp;
    }
char Pop (StackPtr &top)
    {
     if (top==NULL)
       {
    cout<<"ERROR";
    system("pause");
    return 0;
       }
     char c=top->data;
     StackPtr tmp=top;
     top=top->pred;
     return c;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 12:59     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.
Посмотрите здесь:

C++ Проверить, является ли строка, введённая с клавиатуры, палиндромом
C++ Определить является ли строка палиндромом и удалить заглавные символы
Определить, является ли введённая с клавиатуры строка двоичным числом C++
Определить, является ли заданная строка палиндромом C++
программа, которая проверяет, является ли введённая с клавиатуры строка шестнадцатеричным числом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
13.11.2013, 13:29     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #2
длинна вводимой строки любая?

Добавлено через 41 секунду
или её длинна равна:
Цитата Сообщение от Fintt Посмотреть сообщение
cout<<"Vvedite chislo simvolov: ";
Добавлено через 1 минуту
и причём тут стек ? препод так сказал делать?
Fintt
 Аватар для Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
13.11.2013, 13:36  [ТС]     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #3
Я сначала брал массив символов, просто пробовал по разному, что-то логики походу не хватает, Например слово "pop" есть палиндром. В том то и дело что это задание и есть.
Цитата Сообщение от Fintt Посмотреть сообщение
Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.
Я как понил, сначало забиваешь символы в стек, а потом вытаскиваешь из него по символьно, и если забитый стек равен извлечённому, значить палиндром.
newbie666
Заблокирован
13.11.2013, 13:50     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #4
вот твоё решение:
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
#include <tchar.h>
#include <iostream>
#include <string>
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string inputData;
    std::cout << "Enter the string: ";
    std::cin >> inputData;  
    if(inputData.size()%2 != 0)
    {
        std::cout << "The input string is not a palindrome" << std::endl;               
    }
    else
    {
        std::string leftSide = inputData.substr(0, inputData.size()/2);
        std::string rightSide = inputData.substr(inputData.size()/2, inputData.size()/2);   
        std::reverse(rightSide.begin(),rightSide.end());
        if(leftSide == rightSide)
            std::cout << "The input string is a palindrome" << std::endl;
        else
            std::cout << "The input string is not a palindrome" << std::endl;
    }
    
    system("pause");
    
    return 0;
}
извращаться через твоё кхэ кхэ стэк не хочу и не буду.... Что за бред? Чему только школьников учат......
Fintt
 Аватар для Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
13.11.2013, 13:53  [ТС]     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #5
Тема была "Стеки"))
newbie666
Заблокирован
13.11.2013, 14:24     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #6
ну вот тебе стэк бугага
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
#include <tchar.h>
#include <iostream>
#include <string>
#include <vector>
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string inputData;
    std::cout << "Enter the string: ";
    std::cin >> inputData;  
    if(inputData.size()%2 != 0)
    {
        std::cout << "The input string is not a palindrome" << std::endl;               
    }
    else
    {
        std::vector<char> stack;
        for(unsigned i=inputData.size()/2;i<inputData.size();i++)
            stack.push_back(inputData[i]);
 
        bool palindrome = true;
        for(int i=0;i<inputData.size()/2;i++)
        {           
            if(inputData[i] != stack[stack.size()-1-i])
            {
                palindrome = false;
                break;
            }
        }
 
        if(palindrome)
            std::cout << "The input string is a palindrome" << std::endl;
        else
            std::cout << "The input string is not a palindrome" << std::endl;
    }
    
    system("pause");
    
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от newbie666 Посмотреть сообщение
stack[stack.size()-1-i]
чтоб не считать с конца, можешь в вектор не пуш бэком загонять, а в начало...короче как хочешь так и суй

Добавлено через 21 минуту
чтоб пустить преподу пыль в глаза, можешь сделать так (цикл for поменялся):
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
#include <tchar.h>
#include <iostream>
#include <string>
#include <vector>
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string inputData;
    std::cout << "Enter the string: ";
    std::cin >> inputData;  
    if(inputData.size()%2 != 0)
    {
        std::cout << "The input string is not a palindrome" << std::endl;               
    }
    else
    {
        std::vector<char> stack;
        for(unsigned i=inputData.size()/2;i<inputData.size();i++)
            stack.push_back(inputData[i]);      
 
        bool palindrome = true;
        for(int i=0;i<inputData.size()/2;i++)
        {           
            if(inputData[i] != *(stack.rbegin()+=i))
            {
                palindrome = false;
                break;
            }
        }
 
        if(palindrome)
            std::cout << "The input string is a palindrome" << std::endl;
        else
            std::cout << "The input string is not a palindrome" << std::endl;
    }
    
    system("pause");
    
    return 0;
}
Alexxx7
97 / 33 / 5
Регистрация: 24.04.2012
Сообщений: 151
13.11.2013, 16:47     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #7
Мне кажется палиндромы могут иметь не только чётное количество символов, по этому первая проверка на чётность лишняя и решение тогда надо переосмыслить
newbie666
Заблокирован
13.11.2013, 16:51     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #8
ну и зря.
ВИКИПЕДИЯ:
...одинаково читающееся в обоих направлениях. Иногда палиндромом неформально называют любой симметричный относительно своей середины набор символов
scotty
28 / 28 / 1
Регистрация: 09.09.2012
Сообщений: 131
13.11.2013, 17:03     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #9
палиндром может быть не четным, тк кк "аа" - палиндром, а также "ааа" - палиндром и "а" - тоже является палиндромом по сути. Когда-то задавался этой задачи и для себя решил использовать какой алгоритм, вытягиваю строку которая начинается и заканчивается одинаковым символом. После чего выделяю динамично память под размер строки и делаю его обратную проекцию, сравниваю их если ответ положительный то это палиндром, в отрицательном случае ищем дальше.
Alexxx7
97 / 33 / 5
Регистрация: 24.04.2012
Сообщений: 151
13.11.2013, 17:03     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #10
Думаю чтоб развеять сомнения можно переделать так:
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
#include <tchar.h>
#include <iostream>
#include <string>
#include <algorithm>
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string inputData;
    std::cout << "Enter the string: ";
    std::cin >> inputData;  
   
    std::string leftSide = inputData.substr(0, inputData.size()/2);
    std::string rightSide;
    if(inputData.size()%2 != 0)
        rightSide = inputData.substr(inputData.size()/2 + 1, inputData.size()/2);   
    else
        rightSide = inputData.substr(inputData.size()/2, inputData.size()/2); 
    
    std::reverse(rightSide.begin(),rightSide.end());
    if(leftSide == rightSide)
        std::cout << "The input string is a palindrome" << std::endl;
    else
        std::cout << "The input string is not a palindrome" << std::endl;
 
   system("pause");
    
    return 0;
}
тогда на любой вкус и цвет
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.11.2013, 17:35     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #11
Делай как препод говорит с использованием стека. Тут вам походу не встречалась задача как с помощью стека определить является ли палиндром строка. Это делается легко. Стек это такая структура первый элемент вошол последний вышел, просто загоняешь в стек строку и начинаешь выводить элементы и сравнивать с исходной строкой, если все время будет равно, то это палиндром, если будет не равно хотябы раз то это не палиндром.

Походу вы все не поняли как с помощью стека это можно сделать или не знаете что такое стек? От слово допустим прирп загоняем его в стек у нас получается тоже слово при выводе прирп, выводим по букве и сравниваем с исходным, все равны палиндром. Теперь возьмем привп загоняем в стек у нас получиться при выводе из стека пвирп, стек просто переворачивает (реверсирует) строку и дальше выводим и сравниваем с исходной строкой, ага не совпало все не палиндром.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2013, 15:22     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.
Еще ссылки по теме:

C++ Используя стек, определить, является ли введённая с клавиатуры строка палиндромом
Дана строка символов. Проверьте,является ли данная строка палиндромом C++
C++ Определить, является ли строка палиндромом. Модифицировать код

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

Или воспользуйтесь поиском по форуму:
Alexxx7
97 / 33 / 5
Регистрация: 24.04.2012
Сообщений: 151
14.11.2013, 15:22     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. #12
проверте или работает
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
#include <iostream>
#include <cstring>
using namespace std;
bool is_polindrom( char* str);
int main()
{
    char *str = new char[256];
    cout<<"Iput string -> ";
    cin>>str;
    if(is_polindrom(str))
       cout << "The input string is a palindrome" << std::endl;
    else
       std::cout << "The input string is not a palindrome" << std::endl;
    return 0;
}
bool is_polindrom( char* str){
    char *rez = new char[256];
    int i = strlen(str - 1), j = 0;
    for(; i>=0; j++, i--)
        rez[j] = str[i];
    rez[j]= '\0';
    cout<<rez<<endl;
    return !strcmp(str, rez);
}
Добавлено через 27 минут
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
#include <iostream>
#include <cstring>
using namespace std;
bool is_polindrom( char* str);
int main()
{
    char *str = new char[256];
    cout<<"Iput string -> ";
    cin>>str;
    if(is_polindrom(str))
       cout << "The input string is a palindrome" << std::endl;
    else
       std::cout << "The input string is not a palindrome" << std::endl;
    return 0;
}
bool is_polindrom( char* str){
    char *rez = new char[256];
    int i = strlen(str)- 1, j = 0;//извените тут ошибся
    for(; i>=0; j++, i--)//тут по моему использован принцип последний пришёл - первый ушёл
        rez[j] = str[i];//последний символ полученной строки присваевам первому символу результирующей
    //и дальше перемещаемся в противоположных направлениях
    rez[j]= '\0';
    cout<<rez<<endl;
    return !strcmp(str, rez);
}
Добавлено через 21 час 7 минут
Вариант ну очень стекового решения
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
#include <iostream>
#include <cstring>
using namespace std;
class node{
public:
    node *head;
    char symbol;
    node(void){
        head = NULL;
        symbol = '\0';
    }
};
class stek{
    node *ptr;
public:
    stek(){
        ptr = NULL;
    }
    void add_symbol(char sym){
        node *temp = new node;
        temp->symbol = sym;
        if(ptr == NULL)
            ptr = temp;
        else{
            temp->head = ptr;
            ptr = temp;
        }
    }
    char insert_symbol(void){
        char symbol= '\0';
        if(ptr != NULL){
            node *temp = ptr;
            symbol = ptr->symbol;
            ptr = ptr->head;
            delete temp;
        }
        return symbol;
    }
    void create_stek(char *str){
        while(*str != '\0')
            add_symbol(*(str++));
    }
    bool is_polindrom(char *str){
        create_stek(str);
        char *str_stek = new char[256];
        int i = 0;
        while( ptr != NULL)
            str_stek[i++] = insert_symbol();
        str_stek[i] = '\0';
        if( strcmp( str, str_stek))
            return false;
        else 
            return true;
    }
};
 
int main()
{
    stek a;
    char *str = new char[256];
    cout<<"Iput string -> ";
    cin>>str;
    if(a.is_polindrom(str))
        cout << "The input string is a palindrome" << std::endl;
    else
       std::cout << "The input string is not a palindrome" << std::endl;
 
    return 0;
}
Yandex
Объявления
14.11.2013, 15:22     Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.
Ответ Создать тему
Опции темы

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