1 / 1 / 0
Регистрация: 02.05.2012
Сообщений: 18
1

По данной строке, определите, является ли она палиндромом

20.02.2013, 06:34. Показов 35764. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
По данной строке, определите, является ли она палиндромом. В принципе задача мне понятна, только с кодом проблемы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<conio.h>
#include<cstring>
 
using namespace std;
 
char a[100], b[100], c[100];
 
int main()
{
    cin >> a;
    strcpy(c,a);
    strrev(a);
    strcpy(b,a);
    if (b==c) {cout<<"eto palindrom";}
    else    {cout<<"eto ne palindrom";}
    getch ();
    return 0;
}
вроде понятно, вводимую строку реверсирую и сравниваю с исходной строкой, а она не сравнивается. Как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2013, 06:34
Ответы с готовыми решениями:

Дана строка символов. Является ли заданная она палиндромом
Пожалуйста,Помогите разобраться с ректорской к.р.! Вот есть задание: Дана строка символов....

Класс "Строка", проверить является ли она палиндромом
2.Напишите класс, который принимает с клавиатуры строковое значение и определяет, является ли оно...

Как зделать чтобы входная строка, если она не палиндром, делалась палиндромом, т.е. к строке добавлялись недостающие символы?
Как зделать чтобы входная строка, если она не палиндром, делалась палиндромом, т.е. к строке...

Определите, есть ли в данной строке указанное слово
Ну, не стал напрягаться, и взял такое предложение - Определите есть ли в данной строке указанное...

27
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
20.02.2013, 06:39 2
Посимвольно.
В цикле от 0 до середины строки проверяете элементы на равнозначность (с начала и конца строки).
И не нужно ничего реверсировать.

То, что делаете Вы, это не сравнение строк.
1
Модератор
Эксперт С++
13482 / 10739 / 6402
Регистрация: 18.12.2011
Сообщений: 28,650
20.02.2013, 09:03 3
Уж коли используете STL, то замените
char a[100], b[100], c[100];
на
string a,b,c;
и тогда строки можно сравнивать как в Вашем примере.
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
20.02.2013, 09:45 4
Цитата Сообщение от T-killer Посмотреть сообщение
if (b==c)
это сравнение адресов двух массивов. Нужно использовать strcmp

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
#include <cstdio>
 
int main()
{
    const size_t len = 100;
    char a[len];
    char b[len];
    std::cout << ">>";
    gets_s(a);
    strcpy(b, a);
    strrev(b);
    std::cout << (strcmp(a, b) == 0 ? "eto palindrom" : "eto ne palindrom") << std::endl;
    return 0;
}
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.02.2013, 09:51 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <algorithm>
#include <boost/algorithm/string.hpp>
#include <boost/range/adaptor/reversed.hpp>
 
bool is_pal(const std::string& s1, const std::string& s2)
{
   return boost::equals(boost::to_lower_copy(boost::erase_all_copy(s1, " ")),
         boost::to_lower_copy(boost::erase_all_copy(s2, " ")) | boost::adaptors::reversed);
}
 
int main()
{
   const std::string s1 = "hello and what", s2 = "tahwdna olleh";
   const std::string s3 = "this is", s4 = "is this";
   std::cout << is_pal(s1, s2) << " " << is_pal(s3, s4) << std::endl;
}
http://www.worldoflogs.com/rep... 828&e=6319
0
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
20.02.2013, 10:57 6
По идее так будет быстрее (т.к. строки не переворачиваются, а сразу смотрим, палиндром или нет), и памяти занимает меньше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
bool palind=true;
string a;
cout << ">>";
getline(cin, a);
int len = a.length();
for (int i=0; i<len/2; i++)
    if (a[i]!=a[len-i-1]) {palind=false; break;}
 
cout << (palind ? "eto palindrom" : "eto ne palindrom") << endl;
 
system("pause");
return 0;
}
1
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 58
12.07.2017, 17:31 7
Здравствуйте! Пожалуйста помогите починить код. Условие задачи следующее (в принципе в начале темы сказано):
По данной строке определите, является ли она палиндромом (то есть, читается одинаково как слева-направо, так и справа-налево).
Входные данные

На вход подается 1 строка без пробелов.
Выходные данные

Необходимо вывести yes, если строка является палиндромом, и no в противном случае.


Вот код:
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 <string>
#include <cstring>
using namespace std;
int main() {
    int j, i; 
    bool k;
      string s, p; // две строки s - для ввода строки, p - для той же строки, но элементы которой будут расставлены в обратном порядке
        getline (cin, s);
        for (i = s.size() - 1, j = 0; i >= 0; i--, j++){
            p[j] = s[i]; // забиваем строку, в которой элементы будут стоять в обратном порядке относительно оригинальной
        }
        for (i = 0; i < p.size(); i++){
            if (s[i] != p[i]){ // сравниваем оригинальную строку и "обратную"
                k = false;
                break;
            }
        }    
    if (k){
        cout << "yes";
    }else{
        cout << "no";
    }
  return 0;
}
Я его запускал на ideone и получилось так, что не выполняются циклы. Может я неправильно определяю длину строки или неправильно задаю типы переменных, используемых в качестве строк. Пожалуйста подскажите что не так.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
12.07.2017, 19:15 8
легкий способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
 
const char * getAnswer(const std::string & s)
{
    return std::equal(s.cbegin(), s.cbegin() + s.size() / 2, s.crbegin()) ? "yes" : "no";
}
 
int main()
{
    std::string s;
    
    std::cin >> s;
    
    std::cout << getAnswer(s) << "\n";
}
ваш способ:
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 <string>
using namespace std;
 
bool isPalindrom(const std::string & s)
{
    for (std::size_t i = 0, j = s.size() - 1; i <= j; ++i, --j)
    {
        if (s[i] != s[j])
            return false;
    }
    return true;
}
 
int main() {
      string s;
        getline (cin, s);
        
    if (isPalindrom(s)){
        cout << "yes";
    }else{
        cout << "no";
    }
  return 0;
}
1
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,193
12.07.2017, 20:37 9
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
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stack.h>
 
int main() {
 
char a;
string s="";
stack <char> t;
 
   for(;;)
   {
    a=getch();
    if(a==13)break;
    cout<<a;
    s+=a;
    t.push(a);
    }
 
   int i=0,flag=0;
   while(s[i]!='\0')
   {
      if(t.top()!=s[i++])
      {
      cout<<"ne polindrom";
      flag++;
      break;
      }
      t.pop();
    }
 
     if(flag==0)
     cout<<"\npolindrom";
 
    system("pause>NULL");
    return 0;
}
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
12.07.2017, 20:45 10
повар1, этот код не скомпилируется ни на одном нормальном компиляторе.
0
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,193
12.07.2017, 20:54 11
GbaLog-, У нас запретили на жигулях ездить?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
12.07.2017, 21:00 12
Цитата Сообщение от повар1 Посмотреть сообщение
У нас запретили на жигулях ездить?
а причем тут жигули?
жигули нормальная тачка, заводится, ездит, пускай и старая.
ваша тачка даже не заведется.
я сказал "нормальный", а не "новый".
0
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,193
12.07.2017, 21:17 13
GbaLog-, однако заводится.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
12.07.2017, 21:25 14
Цитата Сообщение от повар1 Посмотреть сообщение
однако заводится.
ага, только этого никто не видел.
0
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,193
12.07.2017, 21:36 15
GbaLog-, посмотри
Миниатюры
По данной строке, определите, является ли она палиндромом  
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
12.07.2017, 23:35 16
А чего 6 билдер? Может тогда сразу на https://ru.wikipedia.org/wiki/Turbo_C ?
Под Visual Studio с 90% вероятностью не заработает.

Добавлено через 1 минуту
Даже если речь о Visual Studio 10-летней давности.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
13.07.2017, 08:21 17
Цитата Сообщение от повар1 Посмотреть сообщение
посмотри
и смысл скриншота, если я сам этот код не смогу проверить даже на правильность? может это фотошоп?
да и никто не сможет, кроме тех, кто пользуется этим же компилятором.
а пользуются им 1.5 человека.
я, конечно, в состоянии проверить и сам алгоритм, но с таким форматированием это себе дороже.
суть вообще не в том, что оно у вас заводится, а в том, что человеку, задавшему вопрос, этот код бесполезен, как и 99.99% участникам и гостям этого форума, т.к. они, я надеюсь, используют компиляторы получше.
а если вы надеялись, что другие будут ваш код переделывать под нормальные компиляторы, то смысл вообще в такой помощи?
1
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,193
13.07.2017, 16:08 18
TRam_, в Visual Studio 2015 разве нет библиотеки <conio.h> и уже отменили контейнер stack?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
13.07.2017, 16:18 19
в с++ как таковом не существует таких заголовков, как <iostream.h> и <stack.h>.
<string.h> - этот заголовок содержит функции из языка C для работы со строками, так же можно подключать, как <cstring>.
вы же используете std::string, заголовок которого у вас не подключен и который находится в заголовке <string>.
<conio.h> - не стандарт, а не стандарт идёт куда подальше, ибо непереносим, как минимум.
так что ваш код ни то, что в VS, он вообще нигде, кроме вашего билдера, не заведется.
0
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,193
13.07.2017, 16:27 20
GbaLog-, смысл кода: сравнить символы строки и контейнера не переворачивая строку. Дана идея. На чем она выполнена не имеет значение. И человеку, который задал этот вопрос, это в принципе не нужно. Он просил только найти ошибку в своем коде.
0
13.07.2017, 16:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2017, 16:27
Помогаю со студенческими работами здесь

Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка...

Найти в данной строке подстроку, которая является палиндромом наибольшей длины
Дается строка. Найти в ней подстроку, которая является палиндромом наибольшей длины. Если их...

Определите, является ли строка палиндромом
Дана строка S. Определите, является ли она палиндромом. Палиндромом называются строки, которые...

Матрицы. Проверить матрицу, является ли она палиндромом
Пожалуйста помогите с заданием. Для отладки есть матрица: A= Чтобы проверить, является ли...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru