Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94
1

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

13.11.2013, 12:59. Просмотров 1975. Ответов 11
Метки нет (Все метки)

Используя стек, определить, является ли введённая с клавиатуры строка палиндромом. Не могу разобраться
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;
    }

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 12:59
Ответы с готовыми решениями:

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

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

Проверить, является ли строка, введённая с клавиатуры, палиндромом
ЗАдание следующее: Написать программу, которая проверяет, является ли...

Определить, является ли введённая с клавиатуры строка текстовым сообщением
Помогите пожалуйста

Определить, является ли введённая с клавиатуры строка двоичным числом
Задание: Напишите программу, которая определяет, является ли введённая с...

11
newbie666
Заблокирован
13.11.2013, 13:29 2
длинна вводимой строки любая?

Добавлено через 41 секунду
или её длинна равна:
Цитата Сообщение от Fintt Посмотреть сообщение
cout<<"Vvedite chislo simvolov: ";
Добавлено через 1 минуту
и причём тут стек ? препод так сказал делать?
0
Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94
13.11.2013, 13:36  [ТС] 3
Я сначала брал массив символов, просто пробовал по разному, что-то логики походу не хватает, Например слово "pop" есть палиндром. В том то и дело что это задание и есть.
Цитата Сообщение от Fintt Посмотреть сообщение
Используя стек, определить, является ли введённая с клавиатуры строка палиндромом.
Я как понил, сначало забиваешь символы в стек, а потом вытаскиваешь из него по символьно, и если забитый стек равен извлечённому, значить палиндром.
0
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;
}
извращаться через твоё кхэ кхэ стэк не хочу и не буду.... Что за бред? Чему только школьников учат......
1
Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94
13.11.2013, 13:53  [ТС] 5
Тема была "Стеки"))
1
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;
}
1
Alexxx7
98 / 34 / 10
Регистрация: 24.04.2012
Сообщений: 151
13.11.2013, 16:47 7
Мне кажется палиндромы могут иметь не только чётное количество символов, по этому первая проверка на чётность лишняя и решение тогда надо переосмыслить
0
newbie666
Заблокирован
13.11.2013, 16:51 8
ну и зря.
ВИКИПЕДИЯ:
...одинаково читающееся в обоих направлениях. Иногда палиндромом неформально называют любой симметричный относительно своей середины набор символов
0
scotty
28 / 28 / 3
Регистрация: 09.09.2012
Сообщений: 131
13.11.2013, 17:03 9
палиндром может быть не четным, тк кк "аа" - палиндром, а также "ааа" - палиндром и "а" - тоже является палиндромом по сути. Когда-то задавался этой задачи и для себя решил использовать какой алгоритм, вытягиваю строку которая начинается и заканчивается одинаковым символом. После чего выделяю динамично память под размер строки и делаю его обратную проекцию, сравниваю их если ответ положительный то это палиндром, в отрицательном случае ищем дальше.
0
Alexxx7
98 / 34 / 10
Регистрация: 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;
}
тогда на любой вкус и цвет
0
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.11.2013, 17:35 11
Делай как препод говорит с использованием стека. Тут вам походу не встречалась задача как с помощью стека определить является ли палиндром строка. Это делается легко. Стек это такая структура первый элемент вошол последний вышел, просто загоняешь в стек строку и начинаешь выводить элементы и сравнивать с исходной строкой, если все время будет равно, то это палиндром, если будет не равно хотябы раз то это не палиндром.

Походу вы все не поняли как с помощью стека это можно сделать или не знаете что такое стек? От слово допустим прирп загоняем его в стек у нас получается тоже слово при выводе прирп, выводим по букве и сравниваем с исходным, все равны палиндром. Теперь возьмем привп загоняем в стек у нас получиться при выводе из стека пвирп, стек просто переворачивает (реверсирует) строку и дальше выводим и сравниваем с исходной строкой, ага не совпало все не палиндром.
1
Alexxx7
98 / 34 / 10
Регистрация: 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;
}
0
14.11.2013, 15:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2013, 15:22

программа, которая проверяет, является ли введённая с клавиатуры строка шестнадцатеричным числом
помогите, плиз, с прогой Написать программу, которая проверяет, является ли...

Определить, является ли введённая строка правильной записью целого десятичного числа без знака
Определить, является ли введённая строка правильной записью целого десятичного...

Определить, является ли строка палиндромом
У вас есть строка. Определить, погоду это palindrom или нет. Palindrom это...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru