Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
T-killer
1 / 1 / 0
Регистрация: 02.05.2012
Сообщений: 18
#1

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

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

По данной строке, определите, является ли она палиндромом. В принципе задача мне понятна, только с кодом проблемы.
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 06:34
Ответы с готовыми решениями:

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

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

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

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

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

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

То, что делаете Вы, это не сравнение строк.
1
zss
Модератор
Эксперт С++
7089 / 6622 / 4194
Регистрация: 18.12.2011
Сообщений: 17,459
Завершенные тесты: 1
20.02.2013, 09:03 #3
Уж коли используете STL, то замените
char a[100], b[100], c[100];
на
string a,b,c;
и тогда строки можно сравнивать как в Вашем примере.
0
Пaтрик
425 / 393 / 132
Регистрация: 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;
}
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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
0
Asker
117 / 105 / 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;
}
0
Qitelery
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 40
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
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
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
повар1
170 / 148 / 133
Регистрация: 24.02.2017
Сообщений: 589
Завершенные тесты: 1
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
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
12.07.2017, 20:45 #10
повар1, этот код не скомпилируется ни на одном нормальном компиляторе.
0
повар1
170 / 148 / 133
Регистрация: 24.02.2017
Сообщений: 589
Завершенные тесты: 1
12.07.2017, 20:54 #11
GbaLog-, У нас запретили на жигулях ездить?
0
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
12.07.2017, 21:00 #12
Цитата Сообщение от повар1 Посмотреть сообщение
У нас запретили на жигулях ездить?
а причем тут жигули?
жигули нормальная тачка, заводится, ездит, пускай и старая.
ваша тачка даже не заведется.
я сказал "нормальный", а не "новый".
0
повар1
170 / 148 / 133
Регистрация: 24.02.2017
Сообщений: 589
Завершенные тесты: 1
12.07.2017, 21:17 #13
GbaLog-, однако заводится.
0
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
12.07.2017, 21:25 #14
Цитата Сообщение от повар1 Посмотреть сообщение
однако заводится.
ага, только этого никто не видел.
0
повар1
170 / 148 / 133
Регистрация: 24.02.2017
Сообщений: 589
Завершенные тесты: 1
12.07.2017, 21:36 #15
GbaLog-, посмотри
0
Миниатюры
По данной строке, определите, является ли она палиндромом  
TRam_
зомбяк
699 / 659 / 208
Регистрация: 14.05.2017
Сообщений: 2,253
12.07.2017, 23:35 #16
А чего 6 билдер? Может тогда сразу на https://ru.wikipedia.org/wiki/Turbo_C ?
Под Visual Studio с 90% вероятностью не заработает.

Добавлено через 1 минуту
Даже если речь о Visual Studio 10-летней давности.
0
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
13.07.2017, 08:21 #17
Цитата Сообщение от повар1 Посмотреть сообщение
посмотри
и смысл скриншота, если я сам этот код не смогу проверить даже на правильность? может это фотошоп?
да и никто не сможет, кроме тех, кто пользуется этим же компилятором.
а пользуются им 1.5 человека.
я, конечно, в состоянии проверить и сам алгоритм, но с таким форматированием это себе дороже.
суть вообще не в том, что оно у вас заводится, а в том, что человеку, задавшему вопрос, этот код бесполезен, как и 99.99% участникам и гостям этого форума, т.к. они, я надеюсь, используют компиляторы получше.
а если вы надеялись, что другие будут ваш код переделывать под нормальные компиляторы, то смысл вообще в такой помощи?
1
повар1
170 / 148 / 133
Регистрация: 24.02.2017
Сообщений: 589
Завершенные тесты: 1
13.07.2017, 16:08 #18
TRam_, в Visual Studio 2015 разве нет библиотеки <conio.h> и уже отменили контейнер stack?
0
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
13.07.2017, 16:18 #19
в с++ как таковом не существует таких заголовков, как <iostream.h> и <stack.h>.
<string.h> - этот заголовок содержит функции из языка C для работы со строками, так же можно подключать, как <cstring>.
вы же используете std::string, заголовок которого у вас не подключен и который находится в заголовке <string>.
<conio.h> - не стандарт, а не стандарт идёт куда подальше, ибо непереносим, как минимум.
так что ваш код ни то, что в VS, он вообще нигде, кроме вашего билдера, не заведется.
0
повар1
170 / 148 / 133
Регистрация: 24.02.2017
Сообщений: 589
Завершенные тесты: 1
13.07.2017, 16:27 #20
GbaLog-, смысл кода: сравнить символы строки и контейнера не переворачивая строку. Дана идея. На чем она выполнена не имеет значение. И человеку, который задал этот вопрос, это в принципе не нужно. Он просил только найти ошибку в своем коде.
0
13.07.2017, 16:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2017, 16:27

С клавиатуры вводится исходная строка. Если в строке имеются цифры, то она является зашифрованной
С клавиатуры вводится исходная строка. Если в строке имеются цифры, то она...

Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если...

В данной строке символов посчитать количество вхождений данной буквы
Указатели и строки. 1) В данной строке символов посчитать кол-во данной буквы...


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

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

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