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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
T-killer
1 / 1 / 0
Регистрация: 02.05.2012
Сообщений: 18
20.02.2013, 06:34     По данной строке, определите, является ли она палиндромом #1
По данной строке, определите, является ли она палиндромом. В принципе задача мне понятна, только с кодом проблемы.
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;
}
вроде понятно, вводимую строку реверсирую и сравниваю с исходной строкой, а она не сравнивается. Как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 06:34     По данной строке, определите, является ли она палиндромом
Посмотрите здесь:

C++ Как зделать чтобы входная строка, если она не палиндром, делалась палиндромом, т.е. к строке добавлялись недостающие символы?
C++ Определите, есть ли в данной строке указанное слово
Дана строка символов. Является ли заданная она палиндромом C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.02.2013, 06:39     По данной строке, определите, является ли она палиндромом #2
Посимвольно.
В цикле от 0 до середины строки проверяете элементы на равнозначность (с начала и конца строки).
И не нужно ничего реверсировать.

То, что делаете Вы, это не сравнение строк.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,170
Завершенные тесты: 1
20.02.2013, 09:03     По данной строке, определите, является ли она палиндромом #3
Уж коли используете STL, то замените
char a[100], b[100], c[100];
на
string a,b,c;
и тогда строки можно сравнивать как в Вашем примере.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
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;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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/reports/0...?s=5828&e=6319
Asker
114 / 102 / 11
Регистрация: 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;
}
Yandex
Объявления
20.02.2013, 10:57     По данной строке, определите, является ли она палиндромом
Ответ Создать тему
Опции темы

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